जब आप एक कैप्चरिंग ग्रुप को दोहराते हैं, तो ज्यादातर फ्लेवर में, केवल आखिरी कैप्चर को रखा जाता है; किसी भी पिछले कैप्चर को ओवरराइट किया गया है। कुछ स्वाद में, उदाहरण के लिए .NET, आप सभी मध्यवर्ती कैप्चर प्राप्त कर सकते हैं, लेकिन जावास्क्रिप्ट के साथ ऐसा नहीं है।
यही है, जावास्क्रिप्ट में, यदि आपके पास एन कैप्चरिंग समूहों के साथ एक पैटर्न है , तो आप केवल प्रति मैच बिल्कुल एन स्ट्रिंग्स पर कब्जा कर सकते हैं , भले ही उन समूहों में से कुछ को दोहराया गया हो।
तो आम तौर पर बोल, तुम क्या करने की जरूरत पर निर्भर करता है:
- यदि यह एक विकल्प है, तो इसके बजाय सीमांकक पर विभाजित करें
- मिलान के बजाय
/(pattern)+/, शायद मेल खाए /pattern/g, शायद एक execपाश में
- ध्यान दें कि ये दोनों बिल्कुल समान नहीं हैं, लेकिन यह एक विकल्प हो सकता है
- बहुस्तरीय मिलान करें:
- एक मैच में दोहराया समूह पर कब्जा
- फिर उस मैच को तोड़ने के लिए एक और regex चलाएं
संदर्भ
उदाहरण
यहाँ <some;words;here>एक पाठ में मेल का एक उदाहरण है , एक execलूप का उपयोग करना , और फिर अलग ;-अलग शब्दों को प्राप्त करने के लिए विभाजन करना ( ideone.com पर भी देखें ):
var text = "a;b;<c;d;e;f>;g;h;i;<no no no>;j;k;<xx;yy;zz>";
var r = /<(\w+(;\w+)*)>/g;
var match;
while ((match = r.exec(text)) != null) {
print(match[1].split(";"));
}
इस्तेमाल किया पैटर्न है:
_2__
/ \
<(\w+(;\w+)*)>
\__________/
1
यह मैचों <word>, <word;another>, <word;another;please>, आदि समूह 2 शब्द के किसी भी संख्या पर कब्जा करने के दोहराया है, लेकिन यह केवल पिछले कब्जा रख सकते हैं। शब्दों की पूरी सूची समूह 1 द्वारा कैप्चर की गई है; यह स्ट्रिंग splitअर्धवृत्ताकार सीमांकक पर है।
संबंधित सवाल