रेगेक्स टेस्टर

अपने स्वयं के टेक्स्ट के विरुद्ध JavaScript रेगुलर एक्सप्रेशन्स का परीक्षण करें। g, i, m, s और u फ़्लैग्स टॉगल करें, हर मेल को उसके इंडेक्स और कैप्चर ग्रुप्स के साथ निरीक्षण करें, और रिप्लेसमेंट रिज़ल्ट को लाइव प्रीव्यू करें।

जैसे आप टाइप करें, हर मेल, हर ग्रुप और हर इंडेक्स देखें। मेल करने के लिए एक पैटर्न और कुछ टेक्स्ट दर्ज करें। हर रिज़ल्ट अपनी स्थिति और कैप्चर ग्रुप्स के साथ सूचीबद्ध है, अमान्य पैटर्न इंजन का अपना एरर मैसेज रिपोर्ट करते हैं, और रिप्लेसमेंट फ़ील्ड बिल्कुल वही दिखाता है जो एक replace कॉल उत्पन्न करेगी।

/ / g
मेल

इंजन की तरह रेगुलर एक्सप्रेशन पढ़ना

फ़्लैग्स अर्थ बदलते हैं, सिर्फ़ सर्च नहीं

पाँच फ़्लैग्स प्राथमिकताएँ नहीं हैं, वे पैटर्न को फिर से परिभाषित करते हैं। g के बिना, एक सर्च पहला मेल लौटाता है और रुक जाता है; इसके साथ, इंजन एक lastIndex कर्सर रखता है और पूरी स्ट्रिंग को वॉक करता है, जो इसका कारण भी है कि कॉल्स के बीच दोबारा उपयोग किया गया ग्लोबल रेगेक्स मेल छोड़ता हुआ प्रतीत हो सकता है। i फ़्लैग केस को ASCII शिफ़्ट के बजाय यूनिकोड केस मैपिंग का उपयोग करके घुमाता है।

सबसे ग़लत समझे जाने वाले दो m और s हैं। m केवल ^ और $ के अर्थ को बदलता है, उन्हें पूरी स्ट्रिंग के बजाय लाइन बाउंड्रीज़ से एंकर करता है; यह . के लिए कुछ नहीं करता। इसके विपरीत s केवल . को बदलता है, इसे न्यूलाइन से मेल कराता है। "डॉटऑल" नाम याद रखने योग्य है। u फ़्लैग पैटर्न को UTF-16 यूनिट्स के बजाय कोड पॉइंट्स पर संचालित करता है, ताकि . एक इमोजी को एक यूनिट के रूप में मेल करे और \u{1F600} एस्केप्स वैध बन जाएँ। यह पहले से सहन किए गए एस्केप्स को भी एरर बना देता है, जो इसका कारण है कि मौजूदा पैटर्न उसे जोड़ते ही टूट सकता है।

ग्रुप्स, इंडाइसेस और रिप्लेसमेंट

हर ब्रैकेटबंद अनुभाग डिफ़ॉल्ट रूप से कैप्चर करता है, अपनी खुली ब्रैकेट के क्रम से नंबर किया गया, और वे नंबर ही रिप्लेसमेंट में $1 और $2 जो संदर्भित करते हैं। नेस्टिंग भी वही नियम पालती है, इसलिए ((a)b) में ग्रुप एक ab है और ग्रुप दो a है। जब आपको केवल ऑल्टरनेशन या रिपीटिशन के लिए ग्रुपिंग चाहिए, तो (?:...) कैप्चर आवंटित करने से बचाता है और नंबरिंग को पठनीय रखता है।

हर मेल के लिए रिपोर्ट किया गया इंडेक्स पहले मेले गए कैरेक्टर का ऑफ़सेट है, जो सुनने से ज़्यादा मायने रखता है। यह आपको अलग-अलग स्थितियों पर दो समान मेलों के बीच अंतर करने, पुष्टि करने की अनुमति देता है कि एक एंकर ने वैसा ही किया जैसा आपने अपेक्षित किया, और क्लासिक ज़ीरो-लेंथ मेल का निदान करता है। \d* जैसा पैटर्न हर जगह खाली स्ट्रिंग से मेल खाता है, इसलिए एक ग्लोबल स्कैन हर स्थिति पर एक मेल ढूँढता है; इंजन केवल तभी आगे बढ़ता है क्योंकि कार्यान्वयन मेल खाली होने पर कर्सर को आगे धकेलते हैं।

बैकट्रैकिंग और मेल सीमा

अधिकांश इंजन्स, JavaScript सहित, बैकट्रैकिंग का उपयोग करते हैं। जब पैटर्न का कोई हिस्सा फ़ेल होता है, तो इंजन आख़िरी निर्णय बिंदु पर लौटता है और कोई दूसरा पथ आज़माता है। आमतौर पर यह अदृश्य होता है। यह विनाशकारी तब बन जाता है जब नेस्टेड क्वांटिफ़ायर्स पथों की संख्या को एक्सपोनेंशियली बढ़ा देते हैं, क्लासिक आकार (a+)+b है a कैरेक्टर्स की लंबी श्रृंखला के विरुद्ध बिना किसी b के। वह इनपुट एक ब्राउज़र टैब को हैंग कर सकता है, और यदि पैटर्न उपयोगकर्ता इनपुट से आता है तो वह डिनायल-ऑफ़-सर्विस वेक्टर बन जाता है।

लगभग सारे को दूर करने के लिए दो आदतें: .* के बजाय विशिष्ट कैरेक्टर क्लासेस को प्राथमिकता दें ताकि विकल्प ओवरलैप न हो सकें, और जहाँ सकें पैटर्न को एंकर करें, क्योंकि एक एंकरड फ़ेल तुरंत अस्वीकृत हो जाता है न कि हर ऑफ़सेट पर दोबारा आज़माया जाता है। यह टूल परिणामों को 500 मेल पर भी कैप करता है और बताता है कि उसने ट्रंकेट किया, ताकि एक भागा हुआ पैटर्न धीमे रिज़ल्ट में गिर जाए न कि फ़्रीज़ पेज में।

ओपन-सोर्स नोट: vanilla JavaScript में किसी तृतीय-पक्ष लाइब्रेरी के बिना कार्यान्वित किया गया।

FAQ

यह किस रेगेक्स फ़्लेवर का उपयोग करता है?
JavaScript, यानी आपके ब्राउज़र में बनाया गया ECMAScript इंजन। Perl, PCRE और Python पैटर्न्स करीब हैं लेकिन लुकबिहाइंड, नेम्ड ग्रुप्स और कुछ एस्केप्स में भिन्न हैं।
g फ़्लैग वास्तव में क्या बदलता है?
इसके बिना आपको केवल पहला मेल मिलता है। इसके साथ इंजन पूरी स्ट्रिंग को स्कैन करता है और हर मेल लौटाता है, जो यहाँ सूची को भरता है।
मुझे खाली मेल क्यों मिलते हैं?
आपका पैटर्न शून्य कैरेक्टर्स से मेल खा सकता है, जैसे `\d*` करता है। एक ग्लोबल स्कैन तब हर स्थिति पर एक मेल रिपोर्ट करता है, और इंजन लूपिंग से बचने के लिए मैन्युअली आगे बढ़ता है।
रिप्लेसमेंट में कैप्चर ग्रुप्स को मैं कैसे रेफ़रेंस करूँ?
पहले ग्रुप के लिए $1, दूसरे के लिए $2, और पूरे मेल के लिए $& का उपयोग करें। यदि आपको एक लिटरल डॉलर साइन चाहिए तो $$ लिखें।
"पहले 500 दिखाए जा रहे हैं" का क्या अर्थ है?
रिज़ल्ट सूची 500 मेल पर कैप की गई है ताकि एक बहुत व्यापक पैटर्न पेज को फ़्रीज़ न कर सके। रिप्लेसमेंट प्रीव्यू अभी भी पूरे टेक्स्ट पर लागू होती है।
मेरा पैटर्न पेज को धीमा क्यों करता है?
(a+)+ जैसे नेस्टेड क्वांटिफ़ायर्स एक्सपोनेंशियल बैकट्रैकिंग का कारण बनते हैं। `.*` के बजाय विशिष्ट कैरेक्टर क्लासेस का उपयोग करें और मैचिंग को लीनियर रखने के लिए पैटर्न को एंकर करें।