आउटपुट सही ढंग से लेबल नहीं किए गए हैं, बस इतना ही है।
सबसे पहले, होना चाहिए? यदि आप समूह को दोहराते हैं, तो प्रत्येक नया उदाहरण अंतिम कैप्चर को ओवरराइट करता है। यदि समूह का उपयोग नहीं किया जाता है तो यह एक खाली स्ट्रिंग या जेएस में undefined
जैसे कुछ वापस लौटाएगा (यह स्वाद पर निर्भर करता है)। इस मामले पर regular-expressions.info पर एक अच्छा लेख है।
अब हम आपके परिणामों को कैसे प्राप्त कर सकते हैं? चलो जावास्क्रिप्ट के साथ शुरू करते हैं।
JS
(गैर-वैश्विक वाले) लेबल वाले सभी उदाहरण उपर्युक्त वर्णन में फिट हैं। वे 0
में वर्णों की वांछित मात्रा से मेल खाते हैं और 1
में अंतिम वर्ण कैप्चर करते हैं। तो हम इन्हें अनदेखा कर सकते हैं।
वैश्विक लोगों के साथ क्या है? यहां आउटपुट गलत तरीके से व्याख्या किया गया था। जब आप String.match()
फ़ंक्शन के साथ वैश्विक ध्वज का उपयोग करते हैं, तो आपको अब सभी कैप्चर की सरणी नहीं मिलती है - लेकिन प्रत्येक मैच के लिए केवल सभी मैचों की एक सरणी (समूह 0
)। इसलिए, +
, *
और {5}
के मामले में जहां केवल एक मैच है, आपको केवल एक ही परिणाम मिलता है। {4}
के साथ लक्ष्य स्ट्रिंग में दो मैचों के लिए पर्याप्त जगह है, इसलिए परिणामस्वरूप सरणी में दो तत्व होते हैं। वैश्विक ध्वज के साथ सभी कैप्चर प्राप्त करने के लिए, आपको एक लूप लिखना होगा और इसके बजाय RegExp.exec()
का उपयोग करना होगा (जो आपको एक समय में एक मैच देता है, लेकिन इसके सभी कैप्चर)।
और PHP के साथ क्या है? ऐसा लगता है कि यह preg_match_all
का उपयोग कर रहा है, जो कि वैसे भी वैश्विक है, यही कारण है कि g
का कोई प्रभाव नहीं पड़ा। +
परिणाम देता है जिसे आप फिर से उम्मीद करेंगे। तो {5}
करता है।
अन्य दो के साथ क्या है? यहां, आउटपुट को गलत तरीके से समझा गया है। डिफ़ॉल्ट रूप से, preg_match_all
एक दो आयामी सरणी देता है, जहां पहली अनुक्रमणिका समूह से मेल खाती है, और दूसरा मैच से मेल खाता है। आपके आउटपुट में, यह दूसरे तरीके से व्याख्या की गई है। इसलिए, जब कई मैचों होते हैं, तो 0
और 1
की पहली जोड़ी दो मिले मैचों का पूरा मिलान है। दूसरी जोड़ी 0
और 1
जो आपने उन दो मैचों में कब्जा कर लिया है।
तो *
के लिए, आपको पहले मैच के रूप में पूर्ण स्ट्रिंग मिलती है, और कैप्चर के रूप में अंतिम वर्ण (0
लेबल वाली दो चीजें), जो सही है। और फिर, *
शून्य-चौड़ाई वाले मैचों की अनुमति देता है, इसलिए आपको खाली कैप्चर के साथ स्ट्रिंग के अंत में एक और (खाली) मैच मिलता है।मुझे यकीन नहीं है कि संबंधित JS'
उदाहरण में अतिरिक्त खाली स्ट्रिंग क्यों नहीं है, क्योंकि String.match
वही काम करेगा।
और {4}
के लिए, तो आप सिर्फ कैप्चर l
और !
, क्रमशः, जो फिर से बिल्कुल ठीक है के साथ जावास्क्रिप्ट मामले में दो मैच (Trol
और olo!
) मिलता है।
'जेएस' और' जेएस 'क्या है? क्या फर्क पड़ता है? –
मुझे लगता है कि साइट आपको सही समूह नहीं दे रही है। इसके बजाए http://www.regexplanet.com/ का प्रयोग करें। –