2013-08-12 6 views
15

मुझे पता है कि इस विषय को स्टैक ओवरफ्लो पर पूरी तरह से कवर किया गया है, लेकिन मैं अपने जीवन के लिए काम करने के लिए नियमित अभिव्यक्ति नहीं कर सकता। तो बिना दोहराए गए एडीओ ...जावास्क्रिप्ट गैर कैप्चरिंग रेगेक्स


यह मेरे पास है।

स्ट्रिंग: <p model='cat'></p>

Regex: cat


क्यों मेरी गैर नहीं है: model='cat'

यह मैं क्या चाहते है: .match(/(?:model=')(.*)(?:')/g)

यह मेरी अभिव्यक्ति क्या देता है कैप्चर समूह ने अनदेखा किया? क्या यह समझ में नहीं आता कि एक गैर-कैप्चरिंग समूह क्या करता है? मेरा रेगेक्स क्यों काम नहीं कर रहा है?

उत्तर

23

पूरे मैच हमेशा समूह 0 हो जाएगा, आप, तो आप इस तरह यह कर सकते हैं (इस मामले में समूह 1 के बाद से पहले समूह गैर पर कब्जा है) कि विशिष्ट समूह का उपयोग करने की जरूरत है:

var str = "<p model='cat'></p>"; 
var regex = /(?:model=')(.*)(?:')/g 
var match = regex.exec(str); 
alert(match[1]); // cat 

Fiddle

इसके अलावा, मैं आप शायद str के भीतर कई मैचों चाहने कर रहे हैं लगता है, तुम कर सकते हो कि इस तरह:

var str = "<p model='cat'></p><p model='dog'></p><p model='horse'></p>"; 
var regex = /(?:model=')([^']*)/g 
var matches = []; 
var match; 
while (match = regex.exec(str)) { 
    matches.push(match[1]); 
} 
alert(matches); // cat,dog,horse 

Fiddle

+0

अजीब .. लगभग जैसे आप देख सकते थे कि मैं क्या टाइप कर रहा था .. यहां तक ​​कि मॉडल के नाम भी वही हैं। धन्यवाद! – vin

+0

यह बिना किसी गैर-कैप्चर के काम करेगा, केवल '/ model =' (। *) '/ G' के साथ और मिलान [1] ' –

+1

में मिलान करें, आमतौर पर गैर-कैप्चर समूह बनाने का कोई कारण नहीं है जब तक आप वास्तव में नहीं एक समूह की आवश्यकता है कि चीजों को करने की जरूरत है – smerny

संबंधित मुद्दे