रेगेक्स टेस्टर
JavaScript रेगुलर एक्सप्रेशन को लाइव टेस्ट करें। मैच हाइलाइट होते हैं और कैप्चर ग्रुप भी दिखते हैं।
हाइलाइट किए गए मैच
मैच और ग्रुप
- ऊपर दिए गए फ़ील्ड में अपना रेगेक्स पैटर्न लिखें (स्लैश में लपेटने की ज़रूरत नहीं)।
- जो फ़्लैग चाहिए उन्हें टॉगल करें: सभी मैच के लिए g, केस-इनसेंसिटिव के लिए i, आदि।
- "टेस्ट स्ट्रिंग" बॉक्स में टेस्ट किया जाने वाला टेक्स्ट पेस्ट या टाइप करें।
- मैच रीयल टाइम में हाइलाइट होते दिखेंगे; नीचे की टेबल में कैप्चर किए गए ग्रुप देखें।
यह क्या करता है?
यह टेस्टर ब्राउज़र के अंदर मौजूद RegExp इंजन से आपका पैटर्न चलाता है — वही इंजन जिसका Node.js, Deno और हर ब्राउज़र इस्तेमाल करता है। मैच इनलाइन हाइलाइट होते हैं। नंबर वाले और नाम वाले कैप्चर ग्रुप एक टेबल में निकाले जाते हैं, ताकि आप देख सकें कि हर कोष्ठक ने असल में क्या पकड़ा।
उदाहरण
पैटर्न (g फ़्लैग के साथ):
\b(\w+)@(\w+\.\w+)\b टेस्ट स्ट्रिंग:
Contact us at [email protected] or [email protected]. Not an email: foo@bar (no TLD). मैच:
1 [email protected] $1: hello $2: example.com
2 [email protected] $1: support $2: happycoder.dev foo@bar मैच नहीं होता क्योंकि \w+\.\w+ के लिए डोमेन में एक बिंदु ज़रूरी है।
मेरी रेगेक्स मैच क्यों नहीं हो रही?
- g फ़्लैग लगाना भूल गए। g के बिना सिर्फ़ पहला मैच मिलता है। /cat/.exec("cat cat") एक "cat" ढूँढता है; /cat/g दोनों ढूँढ लेता है।
- मेटाकैरेक्टर एस्केप नहीं किए। example.com , examplexcom से भी मैच करेगा क्योंकि . किसी भी कैरेक्टर से मिल जाता है। इसे एस्केप करें: example\.com।
- ग्रीडी मैच ज़्यादा खा रहा है। <a><b> पर <.*> पूरी चीज़ पकड़ लेता है। लेज़ी <.*?> या नेगेटेड क्लास <[^>]*> इस्तेमाल करें ताकि पहले > पर ही रुक जाए।
- वर्ड बाउंड्री में उलझन। \b , वर्ड कैरेक्टर और नॉन-वर्ड कैरेक्टर के बीच की स्थिति है। \bfoo-bar\b जैसे पैटर्न फ़ेल होते हैं क्योंकि बीच का - पहले से ही नॉन-वर्ड सीमा है।
- केस मेल नहीं खा रहा। [a-z]+ , Hello से मैच नहीं करेगा। i फ़्लैग लगाएँ या [A-Za-z]+ इस्तेमाल करें।
- मल्टीलाइन ^ / $। m फ़्लैग के बिना ये पूरे स्ट्रिंग के शुरू/अंत से ही जुड़ते हैं, हर लाइन से नहीं। लॉग लाइन स्कैन कर रहे हों तो m चालू करें।
अक्सर पूछे जाने वाले प्रश्न
यह टेस्टर कौन-सा रेगेक्स फ्लेवर इस्तेमाल करता है?
JavaScript (ECMAScript) रेगेक्स, ब्राउज़र के बिल्ट-इन RegExp इंजन के ज़रिए। यह PCRE (PHP, Perl), Python के re मॉड्यूल और POSIX रेगेक्स से कई तरह से अलग है: रिकर्शन नहीं, पज़ेसिव क्वांटिफ़ायर नहीं, नेम्ड ग्रुप (?P<name>...) की जगह (?<name>...), और \d जैसे कैरेक्टर क्लास शॉर्टहैंड तब तक सिर्फ़ ASCII पर काम करते हैं जब तक आप u फ़्लैग न लगाएँ।
क्या यह लुकबिहाइंड सपोर्ट करता है?
हाँ। (?<=foo)bar और (?<!foo)bar जैसे लुकबिहाइंड असर्शन ES2018 में जुड़े और आज के Chromium, Firefox और Safari सभी में चलते हैं। यदि प्रोडक्शन में बहुत पुराने ब्राउज़र लक्ष्य हैं तो caniuse देखकर तय करें — लेकिन यह टेस्टर खुद इन्हें ठीक-ठाक चलाता है।
g, i, m, s और u फ़्लैग का क्या मतलब है?
g पहले मैच की बजाय हर मैच ढूँढता है। i मैच को केस-इनसेंसिटिव बनाता है। m से ^ और $ पूरे स्ट्रिंग की बजाय हर लाइन के शुरू/अंत से जुड़ते हैं। s (dotall) से . नयी लाइनों से भी मैच करता है। u पूरे Unicode हैंडलिंग और सख़्त एस्केप पार्सिंग को चालू करता है। सिर्फ़ ज़रूरी फ़्लैग चुनें — ख़ासकर g मैच की संख्या को बहुत बदल देता है।
मेरा ग्रीडी क्वांटिफ़ायर इतना क्यों खा रहा है?
*, + और {n,} जैसे क्वांटिफ़ायर डिफ़ॉल्ट रूप से ग्रीडी होते हैं — जितना हो सके पकड़ते हैं और सिर्फ़ तब वापस देते हैं जब बाकी पैटर्न फ़ेल हो। इन्हें लेज़ी बनाने के लिए ? लगाएँ: .*? जितना कम हो सके मैच करता है। <a>.*</a> का कई टैग खा जाना ठीक करने का तरीक़ा <a>.*?</a> या नेगेटेड क्लास <a>[^<]*</a> है।
पैटर्न या रिप्लेसमेंट में कैप्चर किए गए ग्रुप को कैसे रेफ़र करें?
पैटर्न के अंदर \1, \2 आदि से पिछले ग्रुप ने जो पकड़ा वही टेक्स्ट फिर मैच करें — (\w+)\s+\1 दोहराए गए शब्द पकड़ता है। रिप्लेसमेंट स्ट्रिंग (इस लाइव टेस्टर में नहीं, पर String.replace में) में $1, $2 का इस्तेमाल करें। नेम्ड ग्रुप पैटर्न में \k<name> और रिप्लेसमेंट में $<name> से रेफ़र होते हैं।
जब पैटर्न में बिंदु, स्लैश या कोष्ठक हो तो रेगेक्स क्यों टूट जाती है?
ये रेगेक्स के मेटाकैरेक्टर हैं। अक्षरशः मैच करने के लिए बैकस्लैश से एस्केप करें: बिंदु के लिए \., स्लैश के लिए \/ (new RegExp स्ट्रिंग में ऐच्छिक, /.../ लिटरल में ज़रूरी), कोष्ठक के लिए \( और \)। ख़ास अक्षर हैं . * + ? ^ $ { } ( ) | [ ] \ — इनमें से किसी को भी लिटरल टेक्स्ट के तौर पर इस्तेमाल करने के लिए एस्केप चाहिए।
क्या आप यहाँ मेरी लिखी रेगेक्स या टेस्ट टेक्स्ट सहेजते हैं?
नहीं। आप जो पैटर्न लिखते हैं और जिस टेक्स्ट पर टेस्ट करते हैं — हम उन्हें सहेजते नहीं। टैब बंद या रिफ्रेश होते ही सब कुछ मिट जाता है — कोई लॉग नहीं, हमारी तरफ़ मैच का कोई रिकॉर्ड नहीं। अतिरिक्त भरोसे के लिए ब्राउज़र के डेवलपर टूल्स में जाँच लें।