रेगेक्स (Regex) मैच क्यों नहीं हो रहा है: फ़्लैग्स, मल्टीलाइन एंकर और एस्केप कैरेक्टर
विषय सूची
- सीधा निदान: एक सही सिंटैक्स वाला रेगेक्स मैच क्यों नहीं होता
- आवश्यक फ़्लैग्स: g, i, m, और s (m और s को कभी न मिलाएँ)
- ग्रीडी (.*) बनाम लेज़ी (.*?) क्वांटिफ़ायर्स
- एस्केप वर्ण और बैकस्लैश का जाल (लिटरल बनाम वर्ण वर्ग संदर्भ)
- GoToolstack इंजन पर परीक्षित वास्तविक उदाहरण
- इंजन अंतर और ReDoS से बचाव
- GoToolstack डेवलपर टूल्स
- तकनीकी संदर्भ और आधिकारिक मानक
1. सीधा निदान: एक सही सिंटैक्स वाला रेगेक्स मैच क्यों नहीं होता
एक रेगुलर एक्सप्रेशन जो सिंटैक्स में सही दिखता है, वह अक्सर छूटे हुए फ़्लैग्स, अप्रत्याशित न्यूलाइन या गलत एस्केप कैरेक्टर के कारण विफल हो जाता है। जब कोई पैटर्न 0 परिणाम देता है या एक शब्द के बजाय पूरे दस्तावेज़ को पकड़ लेता है, तो रेगेक्स इंजन नियमों को आपकी अपेक्षा से अलग तरीके से संसाधित कर रहा होता है।
अपने पैटर्न को बदलने से पहले इन चार प्रमुख निष्पादन चरणों की जाँच करें:
2. आवश्यक फ़्लैग्स: g, i, m, और s (m और s को कभी न मिलाएँ)
फ़्लैग्स इंजन के नियमों को नियंत्रित करते हैं: g सभी मैच खोजता है; i केस की अनदेखी करता है; m हर लाइन के लिए ^ और $ को सक्षम करता है; s बिंदु को नई लाइनों को पार करने की अनुमति देता है।

- g (Global): पहले मिलान पर रुकने के बजाय पूरी स्ट्रिंग में खोज जारी रखता है।
- i (Ignore Case): बड़े और छोटे अक्षरों के बीच का अंतर समाप्त करता है।
- m (Multiline):
^और$को प्रत्येक व्यक्तिगत पंक्ति की शुरुआत और अंत से मेल कराने की अनुमति देता है। - s (dotAll): बिंदु (
.) को नई लाइन कैरेक्टर (\n,\r) से भी मेल कराने की अनुमति देता है।
महत्वपूर्ण अंतर: मल्टीलाइन (m) फ़्लैग बिंदु (.) को नई लाइनों को पार करने की अनुमति नहीं देता है! इसी तरह dotAll (s) फ़्लैग ^ और $ को अलग-अलग लाइन सीमाओं से मेल नहीं कराता है। इन्हें मिलाना सबसे आम त्रुटि है।
3. ग्रीडी (.*) बनाम लेज़ी (.*?) क्वांटिफ़ायर्स
डिफ़ॉल्ट रूप से क्वांटिफ़ायर ग्रीडी (लालची) होते हैं: वे आगे के टोकन के लिए पीछे हटने से पहले जितने संभव हो उतने अक्षर उपभोग कर लेते हैं।
टैग निकालते समय: <div>पहला</div><div>दूसरा</div>
ग्रीडी पैटर्न <div>.*</div>: पहले ओपनिंग टैग से लेकर आखिरी क्लोजिंग टैग तक सब कुछ एक बड़े मैच में बदल देता है।
लेज़ी पैटर्न <div>.*?</div>: प्रश्न चिह्न क्वांटिफायर को लेज़ी (lazy) बना देता है, जिससे यह पहले बंद होने वाले टैग (<div>First</div>) पर रुक जाता है। हालाँकि, टेक्स्ट से दोनों स्वतंत्र मिलानों को निकालने के लिए, ग्लोबल फ़्लैग (g) को शामिल करना अनिवार्य है (/<div>.*?</div>/g)। g फ़्लैग के बिना इंजन पहले मिलान के तुरंत बाद रुक जाता है।
4. एस्केप वर्ण और बैकस्लैश का जाल (लिटरल बनाम वर्ण वर्ग संदर्भ)
रेगुलर एक्सप्रेशन सिंटैक्स वर्णों को आरक्षित करता है: \ ^ $ . | ? * + ( ) [ { } ]। एस्केपिंग नियम संदर्भ पर निर्भर करते हैं:
- वर्ण वर्गों के बाहर: विराम चिह्नों को शाब्दिक रूप से मिलाने के लिए सभी सिंटैक्स वर्णों को बैकस्लैश (उदा.
\.,\$) से एस्केप करना चाहिए। - वर्ण वर्गों के अंदर (
[...]): अधिकांश मेटावर्ण अपनी विशेष भूमिका खो देते हैं और शाब्दिक रूप से मेल खाते हैं (उदा.[.]बिंदु से और[*]तारांकन से मिलता है)। केवल^(शुरुआत में निषेध),-(रेंज),](वर्ग समाप्ति) और\(एस्केप) ही विशेष अर्थ रखते हैं।
जावास्क्रिप्ट कोड में रेगुलर एक्सप्रेशन लिटरल और स्ट्रिंग कंस्ट्रक्टर में अंतर रखें:
// 1. Regex Literal (single backslash required)
const reLiteral = /^\d+\.\d+$/;
// 2. String Constructor (double backslash mandatory)
const reConstructor = new RegExp("^\\d+\\.\\d+$");5. GoToolstack इंजन पर परीक्षित वास्तविक उदाहरण
सभी पैटर्न ECMAScript इंजन पर वास्तविक इनपुट के साथ सत्यापित किए गए हैं:
| परिदृश्य और इनपुट | पैटर्न और फ़्लैग्स | सत्यापित अपेक्षित मिलान |
|---|---|---|
ERROR 404 /api\nINFO 200 /home\nERROR 500 /db |
/^ERROR\s+(\d+)/gm |
ERROR 404, ERROR 500 |
Total cost: $49.99 USD |
/\$(\d+\.\d{2})/ |
$49.99 |
/* Multi-line |
/\/\*.*?\*\//s |
/* Multi-line |
6. इंजन अंतर और ReDoS से बचाव
GoToolstack परीक्षक आपके ब्राउज़र के मूल ECMAScript इंजन का उपयोग करता है। Python या PCRE से पैटर्न लाते समय इन सीमाओं का ध्यान रखें:
- लुकबिहाइंड सपोर्ट: आधुनिक ES2018+
(?<=...)का समर्थन करता है, लेकिन पुराने ब्राउज़रों में त्रुटि आ सकती है। - पॉसेसिव क्वांटिफ़ायर अनुपलब्ध: जावास्क्रिप्ट में
.*+या एटॉमिक ग्रुप समर्थित नहीं हैं। - ReDoS हैंग सुरक्षा:
(a+)+$जैसे नेस्टेड पैटर्न ब्राउज़र को फ्रीज कर देते हैं। हमारा टूल टाइमआउट सुरक्षा के साथ Web Worker में चलता है। - परफेक्ट ईमेल का भ्रम: RFC 5322 के लिए 500 अक्षरों के विशाल रेगेक्स से बचें। बुनियादी संरचना जांच और सत्यापन लिंक सबसे सुरक्षित है।
7. GoToolstack डेवलपर टूल्स
बिना सर्वर अपलोड के सीधे अपने ब्राउज़र में रेगेक्स का सुरक्षित परीक्षण और निर्माण करें:
तकनीकी संदर्भ और आधिकारिक मानक
- MDN Web Docs: JavaScript रेगुलर एक्सप्रेशन गाइड.
- ECMA-262: ECMAScript भाषा विनिर्देश – RegExp ऑब्जेक्ट्स.
- OWASP: ReDoS (रेगुलर एक्सप्रेशन डिनायल ऑफ सर्विस) रोकथाम गाइड.