Regex टेस्टर
पैटर्न लिखें, ज़रूरी फ़्लैग चुनें और कोई टेक्स्ट पेस्ट करें: टाइप करते ही हर मैच हाइलाइट हो जाता है और उसकी पोज़िशन व कैप्चर ग्रुप के साथ सूची में दिखता है। पैटर्न आपके ब्राउज़र के अपने JavaScript regex इंजन पर चलता है, इसलिए नतीजे आपके कोड जैसे ही आते हैं और टेक्स्ट आपके डिवाइस से बाहर नहीं जाता।
0 अक्षर · 0 शब्द · 0 पंक्तियाँ
मैच यहाँ हाइलाइट होंगे।0 अक्षर · 0 शब्द · 0 पंक्तियाँ
यह पूरी तरह इसी ब्राउज़र टैब में चलता है। आपका टेक्स्ट न अपलोड होता है, न सेव किया जाता है।
JavaScript रेगेक्स टोकन
पहला-मैच कॉलम हर पैटर्न को उसके टेक्स्ट पर उसी JavaScript इंजन से चलाकर बनाया गया जिसने यह पेज बनाया।
| टोकन | मतलब | पैटर्न | टेक्स्ट | पहला मैच |
|---|---|---|---|---|
\d | अंक 0–9 | /\d+/ | Order 66 shipped | 66 |
\w | अक्षर, अंक या अंडरस्कोर (ASCII) | /\w+/ | snake_case-id | snake_case |
\s | व्हाइटस्पेस, टैब और लाइन ब्रेक सहित | /\s+/ | two spaces | |
. | लाइन ब्रेक को छोड़कर कोई भी अक्षर (s हो तो वह भी) | /a.c/ | abc a-c | abc |
^ $ | इनपुट की शुरुआत और अंत (m के साथ पंक्ति की) | /^\w+$/ | single | single |
[abc] | सूची में दिया कोई एक अक्षर | /[aeiou]/ | rhythm and blues | a |
[^abc] | सूची में न दिया कोई भी अक्षर | /[^0-9]+/ | 2026-10-18 | - |
* + ? | 0 या अधिक, 1 या अधिक, 0 या 1 | /colou?r/ | color colour | color |
{n,m} | n से m बार के बीच | /\d{2,4}/ | 7 42 1999 123456 | 42 |
(…) | कैप्चरिंग ग्रुप | /(\d+)px/ | width: 320px | 320px |
(?<name>…) | नामित कैप्चरिंग ग्रुप | /(?<h>\d\d):(?<m>\d\d)/ | at 09:45 | 09:45 |
(?:…) | बिना कैप्चर वाला ग्रुप | /(?:ab)+/ | ababab! | ababab |
a|b | कोई एक तरफ़ | /cat|dog/ | hotdog | dog |
\b | शब्द की सीमा | /\bcat\b/ | concat cat | cat |
(?=…) | इसके बाद आए (lookahead) | /\d+(?=%)/ | 50 of 75% | 75 |
(?<!…) | इससे पहले न आए (negative lookbehind) | /(?<!\$)\b\d+/ | $30 or 40 | 40 |
\p{L} | कोई भी Unicode अक्षर (u चाहिए) | /\p{L}+/u | naïve 東京 | naïve |
छह फ़्लैग और हर फ़्लैग क्या बदलता है
g (global) पहले मैच पर रुकने की बजाय हर मैच ढूँढता है; इसके बिना सूची में सिर्फ़ एक एंट्री रहती है। i अक्षरों के छोटे-बड़े होने को अनदेखा करता है। m (multiline) ^ और $ को पूरे टेक्स्ट की जगह हर लाइन की शुरुआत और अंत पर मैच कराता है, जैसे लाइन के आख़िर के खाली स्पेस ढूँढने वाले पैटर्न के लिए ज़रूरी है। s (dotAll, ES2018 में जुड़ा) . को लाइन ब्रेक से भी मैच होने देता है। u (unicode) टेक्स्ट को कोड पॉइंट मानता है, इसलिए एक इमोजी एक ही कैरेक्टर गिना जाता है, और \p{L} जैसे प्रॉपर्टी एस्केप चालू करता है, जो किसी भी लिपि का कोई भी अक्षर पकड़ता है। y (sticky) सिर्फ़ मौजूदा पोज़िशन पर ही मैच करता है, यही मोड टोकनाइज़र इस्तेमाल करते हैं। JavaScript में मैच इंडेक्स के लिए d और क्लास में सेट ऑपरेशन के लिए v भी है; यह टेस्टर ऊपर के छह फ़्लैग तक ही सीमित है।
टेस्ट टेक्स्ट के नीचे हर मैच का इंडेक्स और उसके ग्रुप दिखते हैं। नंबर वाले ग्रुप सामान्य कोष्ठक से बनते हैं, (?:…) बिना कैप्चर किए ग्रुप करता है, और (?<year>\d{4}) नामवाला ग्रुप बनाता है जो अपने नाम से दिखता है, जैसा ISO तारीख़ वाला सैंपल दिखाता है। Common patterns मेन्यू ईमेल पते, URL, IPv4 पते, हेक्स रंग, UUID, दोहराए शब्द और अंत के खाली स्पेस के लिए जाँचे हुए शुरुआती पैटर्न डालता है। ईमेल पैटर्न को सिर्फ़ मोटी जाँच समझें, वैलिडेशन नहीं: पूरे पते का व्याकरण कहीं ज़्यादा खुला है, और असली परीक्षा संदेश भेजकर ही होती है।
लुकबिहाइंड और कैटास्ट्रॉफ़िक बैकट्रैकिंग
लुकअराउंड किसी पोज़िशन के आसपास के टेक्स्ट को बिना उसे खाए जाँचते हैं। लुकअहेड, (?=…) और (?!…), JavaScript में हमेशा से है; लुकबिहाइंड, (?<=…) और (?<!…), ES2018 में आया और 2023 में Safari 16.4 के साथ हर बड़े ब्राउज़र में पहुँच गया। इसलिए (?<=\$)\d+ "$42" में डॉलर चिह्न को शामिल किए बिना 42 ढूँढता है। कई दूसरे इंजनों के विपरीत, JavaScript में लुकबिहाइंड किसी भी लंबाई का हो सकता है।
JavaScript इंजन बैकट्रैकिंग वाला है: कोई रास्ता फ़ेल होने पर वह लौटकर दूसरे विकल्प आज़माता है। (a+)+$ जैसे नेस्टेड क्वांटिफ़ायर एक ही टेक्स्ट को बाँटने के घातीय तरीके दे देते हैं, इसलिए 30 a के बाद एक x वाली स्ट्रिंग में सेकंड लग सकते हैं और कुछ अक्षर और जोड़ने पर घंटे। यही कैटास्ट्रॉफ़िक बैकट्रैकिंग है, और सर्वर पर यह ReDoS यानी डिनायल ऑफ़ सर्विस बन जाती है; इसी खामी वाले एक WAF नियम ने 2 जुलाई 2019 को Cloudflare के नेटवर्क को करीब आधे घंटे के लिए गिरा दिया था। यह टेस्टर आपके टैब में चलता है, इसलिए ऐसा पैटर्न पेज को फ़्रीज़ कर सकता है; पेज रीलोड करें और पैटर्न ऐसे दोबारा लिखें कि दो क्वांटिफ़ायर एक ही कैरेक्टर पर दावा न कर सकें, .* की जगह [^,]* जैसी सटीक क्लास या ऐंकर इस्तेमाल करें। टेक्स्ट को मैच करने की बजाय उसे बदलने के लिए टेक्स्ट टूल देखें; और डेवलपर यूटिलिटी डेवलपर टूल हब में हैं।
अक्सर पूछे जाने वाले सवाल
- मेरा regex सिर्फ़ एक ही मैच क्यों ढूँढता है?
- g फ़्लैग बंद है। इसके बिना इंजन पहले मैच के बाद रुक जाता है। हर मैच की सूची के लिए g चुनें; अकेला y फ़्लैग भी कई मैच ढूँढता है, पर तभी जब वे एक के ठीक बाद एक आएँ।
- क्या JavaScript में \d दूसरी लिपियों के अंकों से भी मैच करता है?
- नहीं। JavaScript में \d का मतलब सिर्फ़ 0 से 9 है और \w का सिर्फ़ ASCII अक्षर, अंक और अंडरस्कोर, u फ़्लैग के साथ भी। दूसरी लिपियों के लिए u के साथ \p{Nd} या \p{L} इस्तेमाल करें।
- क्या यहाँ टेस्ट किया गया पैटर्न Python या PHP में भी वैसे ही काम करेगा?
- बुनियादी सिंटैक्स चल जाता है, पर बारीकियाँ अलग हैं: Python में नामवाले ग्रुप
(?P<name>…)लिखे जाते हैं, PHP और Python पज़ेसिव क्वांटिफ़ायर सपोर्ट करते हैं जो JavaScript में नहीं हैं, और लुकबिहाइंड के नियम भी अलग हैं। जिस इंजन में चलाना है, उसमें दोबारा टेस्ट करें। - असली डॉट या ब्रैकेट से मैच कैसे करें?
- उसके आगे बैकस्लैश लगाएँ:
\.पीरियड से मैच करता है और\[खुले ब्रैकेट से। कैरेक्टर क्लास के अंदर ज़्यादातर चिह्न पहले से सामान्य कैरेक्टर होते हैं, इसलिए[.]भी सिर्फ़ बिंदु से मैच करता है। - पैटर्न टाइप करते समय पेज अटक क्यों गया?
- संभव है पैटर्न ने आपके टेक्स्ट पर कैटास्ट्रॉफ़िक बैकट्रैकिंग शुरू कर दी। पेज रीलोड करें, फिर
(.*)*या(a+)+जैसे नेस्टेड क्वांटिफ़ायर से बचें और हर हिस्से को कम से कम मैच करने लायक बनाएँ।