2012-01-07 15 views
8

मैं मल्टीलाइन टेक्स्ट में सभी छवियों के यूआरएल प्राप्त करना चाहता हूं (इससे कोई फर्क नहीं पड़ता कि इसमें क्या है)।जावास्क्रिप्ट RegExp: परीक्षण और निष्पादन

यह मेरा कोड है: str के बराबर होती है

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

तो "http://example.dom.com/-6/x_5eb0916a.jpg", testResult के बराबर होती है सच लेकिन परिणामशून्य है। क्यूं कर? क्या आप इस समस्या को हल करने में मेरी मदद करेंगे?

+0

आपके पास लाइन के अंत में एक बहुत अधिक है। 2. 'str' क्या है? यह आपके कोड में अपरिभाषित है। –

+1

सबडोमेन को पार्स किए जाने से रोकने के लिए, आपके डोमेन और फ़ाइल एक्सटेंशन पैटर्न के बीच '\ /' जोड़ने में मददगार हो सकता है अन्यथा http: // some.png.example.com/home.html' आपको http: // some.png' (मुझे लगता है कि यह सिर्फ सिद्धांत का मामला है;))। – Matmarbon

उत्तर

7

यह g ध्वज की वजह से है। यदि आप दो कॉलों को उलटा करते हैं, तो आपको अलग-अलग परिणाम मिलेंगे क्योंकि वैश्विक ध्वज pattern.lastIndex सेट करता है और अगली बार जब आप .test/.exec पर कॉल करते हैं तो उस अनुक्रमणिका से मिलान करना प्रारंभ होता है। कॉल को निष्क्रिय करते समय, आपको .exec के लिए .test के लिए .exec और false के लिए गैर-null परिणाम मिलेगा।

.lastIndex और वैश्विक ध्वज के साथ, अपने मामले में यह .test के लिए URL से मेल खाता है, और के बाद उससे अधिक URL की तलाश में पहले यूआरएल जब आप .exec पर अमल शुरू कर देंगे। कोई और यूआरएल नहीं है, इसलिए आपको null मिल जाएगा। ध्यान दें कि lastIndex को 0 पर रीसेट किया गया है, इसलिए .exec पर कॉल करना फिर से काम करेगा।

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

आप इस कोशिश की,

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

इस मुद्दे पर समाधान के लिए बस की lastIndex स्थापित करने के लिए है:

किसी भी तरह, आप str.match(pattern) के लिए बजाय विचार करना है, जो बस सभी मैचों को सूचीबद्ध करता प्रतीत शून्य पर regex।

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; 
संबंधित मुद्दे