दिलचस्प पोस्ट
JPA / Hibernate के साथ की गई संपत्ति की गणना एंड्रॉइड और एमजेपीईजी बिना क्रम के बाइनरी ट्री के पोस्ट ऑर्डर ट्रवर्सल iframe shimming या ie6 (और नीचे) z- सूचकांक बग का चयन करें जावा और सी / सी ++ के बीच अंतर प्रक्रिया संचार के लिए सबसे तेज (कम विलंबता) विधि प्रथम और अंतिम नाम के लिए नियमित अभिव्यक्ति अशक्त प्रकार और टर्नरी ऑपरेटर: क्यों `? 10: शून्य 'मना किया? JQuery का उपयोग करके एक HTTP "PUT" का उपयोग कर फ़ाइल कैसे अपलोड करें? HTML5 कैनवास तत्व को अपनी सामग्री के साथ क्लोन करने का कोई तरीका? पता लगाएँ कि डिवाइस आईफोन एक्स है फ़ाइल अपलोड बिना एक्टिव संपत्ति के काम क्यों करती है? क्या उद्देश्य-सी में -इन विधि निजी बनाने के लिए संभव है? PHP लॉग को त्रुटि लॉग कहां रखता है? (पीपी 5, अपाचे, फास्टसीजी, सीपैनल) जावास्क्रिप्ट का उपयोग करते हुए भारतीय स्वरूप में एक नंबर प्रदर्शित करना .crt और .key को कन्वर्ट करें

जावास्क्रिप्ट रेगेक्स में एक मनमानी समूहों की संख्या कैसे कैप्चर करें?

मुझे जावास्क्रिप्ट की इस पंक्ति की उम्मीद है:

"foo bar baz".match(/^(\s*\w+)+$/) 

जैसे कुछ वापस करने के लिए:

 ["foo bar baz", "foo", " bar", " baz"] 

लेकिन इसके बजाय यह केवल अंतिम कब्जा कर लिया मैच लौटाता है:

 ["foo bar baz", " baz"] 

क्या सभी कब्जा किए गए मैच पाने का कोई तरीका है?

Solutions Collecting From Web of "जावास्क्रिप्ट रेगेक्स में एक मनमानी समूहों की संख्या कैसे कैप्चर करें?"

जब आप एक कैप्चरिंग समूह को दोहराते हैं, तो अधिकांश जायके में, केवल अंतिम कैप्चर रखा जाता है; किसी भी पिछले कैप्चर को अधिलेखित किया गया है। कुछ स्वाद में, जैसे एनएटी, आप सभी मध्यवर्ती कैप्चर प्राप्त कर सकते हैं, लेकिन यह जावास्क्रिप्ट के मामले में नहीं है।

यह जावास्क्रिप्ट में है, अगर आपके एन कैप्चरिंग समूह के साथ एक पैटर्न है, तो आप केवल प्रति मैच बिल्कुल एन स्ट्रिंग कैप्चर कर सकते हैं, भले ही उन कुछ समूहों को दोहराया गया हो।

तो आम तौर पर बोलते हुए, आपको क्या करने की आवश्यकता पर निर्भर करता है:

  • यदि यह एक विकल्प है, तो इसके बजाय सीमांकक पर विभाजित करें
  • मिलान /(pattern)+/ बजाय /(pattern)+/ , शायद मैच /pattern/g , संभवतः एक exec लूप में
    • ध्यान दें कि ये दोनों बिल्कुल बराबर नहीं हैं, लेकिन यह एक विकल्प हो सकता है
  • बहुस्तरीय मिलान करें:
    • एक मैच में दोहराए गए समूह को कैप्चर करें
    • फिर उस मैच को अलग करने के लिए एक और रेगेक्स चलाएं

संदर्भ

  • regular-expressions.info/ एक कैप्चरिंग ग्रुप को दोहराते हुए एक दोहराए गए ग्रुप को कैप्चर करते हुए
    • जावास्क्रिप्ट स्वाद नोट्स

उदाहरण

यहां <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(";")); } // c,d,e,f // xx,yy,zz 

इस्तेमाल किया पैटर्न है:

  _2__ / \ <(\w+(;\w+)*)> \__________/ 1 

यह <word> , <word;another> , <word;another;please> , आदि। किसी भी संख्या में कब्जा करने के लिए समूह 2 को दोहराया जाता है, लेकिन यह केवल अंतिम कैप्चर रख सकता है। शब्दों की संपूर्ण सूची को समूह 1 द्वारा कब्जा कर लिया गया है; इस स्ट्रिंग को अर्धविराम सीमांकक पर split किया जाता है

संबंधित सवाल

  • आप एक जावास्क्रिप्ट regex में मिलान समूहों का उपयोग कैसे करते हैं?

इस बारे में कैसा है? "foo bar baz".match(/(\w+)+/g)

जब तक आप अपने स्ट्रिंग्स को बांटते हैं, तो आप उन्हें विभाजित कर सकते हैं, और फिर उनके साथ प्रारंभिक स्ट्रिंग वापस लौटने के लिए एक अधिक जटिल आवश्यकता नहीं है:

 var data = "foo bar baz"; var pieces = data.split(' '); pieces.unshift(data); 

'जी' का उपयोग करने का प्रयास करें:

 "foo bar baz".match(/\w+/g)