2012-01-07 31 views
8

Çok satırlı metin içerisindeki tüm resimlerin URL'lerini almak istiyorum (ne içerdiği önemli değil). JavaScript RegExp: sınama ve yürütme

Bu

benim kodudur: str eşittir

var pattern = /(http:\/\/\S+\.(?:jpg|gif|png|jpeg|JPG|GIF|PNG|JPEG))/mg; 
var testResult = pattern.test(str)); 
var result = pattern.exec(str); 

Eğer "http://example.dom.com/-6/x_5eb0916a.jpg", testResult eşittir gerçek ama sonucunumaralı telefon numarasıdır.. Niye ya? Bu problemi çözmeme yardım eder misin?

+0

Satır 2 sonunda bir '' '' çok fazla var. Ayrıca 'str' nedir? Kodunuzda tanımlanmamış. –

+1

Alt etki alanlarının ayrıştırılmasını engellemek için etki alanınız ile dosya uzantısı kalıpları arasında bir '\ /' ekleme yararlı olabilir, aksi takdirde http: // some.png.example.com/home.html' size şunları verir: // some.png' (Ben sadece bir prensip meselesi olduğunu kabul ediyorum;)). – Matmarbon

cevap

7

Bu, g bayrağından kaynaklanmaktadır. İki aramayı tersine çevirirseniz, küresel bayrak pattern.lastIndex kümesini ayarlar ve .test/.exec'u bir sonraki arama yaptığınızda bu dizinden eşleşmeye başlar. Aramaları ters çevirirken, .exec için null sonucu ve .test için false elde edersiniz. .lastIndex ve global bayrağı ile

, sizin durumunuzda o .test URL'sini eşleşmeleri ve .exec yürüttüğünüzde sonra daha URL'lerin için ilk URL'yi aramaya başlayacaktır. Başka URL yok, dolayısıyla null'u alacaksınız. lastIndex'un 0'a sıfırlandığını unutmayın, böylece .exec numaralı telefonu tekrar arayın.

var str = " test http://example.dom.com/-6/x_5eb0916a.jpg" 
      + " \nfoo http://example2.com/test.png"; 

var pattern = /(http:\/\/\S+\.(?:jpg|gif|png|jpeg|JPG|GIF|PNG|JPEG))/gm; 

str.match(pattern); 
// ["http://example.dom.com/-6/x_5eb0916a.jpg", "http://example2.com/test.png"] 
1

Bunu denedin mi, bu konuya

"http://example.dom.com/-6/x_5eb0916a.jpg".match(pattern) 
1

Çözüm basitçe lastIndex ayarlamaktır:

neyse

, sadece tüm eşleşmeleri listeler, hangi yerine str.match(pattern) arayan gibi görünüyor sıfıra eşittir.

var pattern = /(http:\/\/\S+\.(?:jpg|gif|png|jpeg|JPG|GIF|PNG|JPEG))/mg; 
var testResult = pattern.test(str)); 
pattern.lastIndex=0; 
var result = pattern.exec(str); 
pattern.lastIndex=0;