रेगुलर एक्सप्रेशन क्या है?
रेगुलर एक्सप्रेशन (regex) एक पैटर्न है जो स्ट्रिंग के समूह का वर्णन करता है: कैरेक्टर क्लास ([0-9]), क्वांटिफ़ायर (+, *, {2,4}), एंकर (^, $) और ग्रुप मिलकर नियम बनाते हैं जिन्हें मैचर टेक्स्ट पर लागू करता है। Regex फ़ॉर्मेट वैलिडेट करते हैं, फ़ील्ड निकालते हैं और सर्च-एंड-रिप्लेस चलाते हैं; JavaScript फ़्लेवर ECMA-262 से परिभाषित है, और इंजनों के छोटे अंतर ही कारण हैं कि पैटर्न को उसी इंजन पर टेस्ट करना चाहिए जो उसे चलाएगा।
गाइड पढ़ें: रेगुलर एक्सप्रेशन (Regex) शुरुआती गाइड
Regex एक्सप्लेनर कैसे इस्तेमाल करें
- रेगुलर एक्सप्रेशन पेस्ट करें (/…/gi जैसा लिटरल भी चलेगा)।
- जो फ़्लैग आप इस्तेमाल करते हैं वे डालें, ताकि ऐंकर और डॉट की व्याख्या सही रहे।
- सारांश और टेबल पढ़ें; पूरी संरचना देखने के लिए पार्स ट्री खोलें।
Regex एक्सप्लेनर की खूबियाँ
- टोकन-दर-टोकन टेबल — हर एलिमेंट का टाइप और आसान भाषा में एक वाक्य
- ग्रुप, क्लास और क्वांटिफ़ाइड एलिमेंट का नेस्टेड व्यू
- नामित ग्रुप, lookahead/lookbehind, lazy क्वांटिफ़ायर, बैक-रेफ़रेंस और यूनिकोड प्रॉपर्टी समझता है
- ^, $ और डॉट के लिए फ़्लैग के अनुसार बदलती व्याख्या
- डॉक्यूमेंटेशन या टूलिंग के लिए JSON पार्स ट्री
- पैटर्न ग़लत होने पर एरर की सटीक जगह
Regex एक्सप्लेनर का उदाहरण
ISO तारीख़ पैटर्न की व्याख्या
इनपुट:
^(?<year>\d{4})-(?<month>0[1-9]|1[0-2])$आउटपुट:
^ → Asserts position at the start of the string.
(?<year>\d{4}) → Named capturing group "year" (#1)…
\d{4} → Matches a digit (0–9), exactly 4 times (greedy).
- → Matches a hyphen "-" literally.
(?<month>0[1-9]|1[0-2]) → Named capturing group "month" (#2)…
$ → Asserts position at the end of the string.Regex एक्सप्लेनर के बारे में अक्सर पूछे जाने वाले सवाल
एक्सप्लेनर क्या-क्या समझता है?
लिटरल, एस्केप (\d \w \s \b, \xhh, \uhhhh, \p{…}), कैरेक्टर क्लास और रेंज, सभी तरह के ग्रुप (कैप्चरिंग, नामित, नॉन-कैप्चरिंग, lookahead, lookbehind), greedy और lazy क्वांटिफ़ायर, अल्टरनेशन, ऐंकर तथा नंबर वाले या नामित बैक-रेफ़रेंस।
व्याख्या में multiline या dotAll का ज़िक्र क्यों आता है?
फ़्लैग ^, $ और डॉट का अर्थ बदल देते हैं। जो फ़्लैग आप इस्तेमाल करते हैं वे डालें, ताकि व्याख्या असल व्यवहार से मेल खाए।
क्या यह PCRE या Python-विशिष्ट सिंटैक्स समझा सकता है?
ज़्यादातर सिंटैक्स एक जैसा है, पर possessive क्वांटिफ़ायर (a++), ऐटॉमिक ग्रुप (?>…) या इनलाइन फ़्लैग (?i) जैसे इंजन-विशिष्ट कंस्ट्रक्ट JavaScript का हिस्सा नहीं हैं और उन्हें एरर के रूप में बताया जाता है।
ग्रुप की नंबरिंग कैसे होती है?
बाएँ से दाएँ, उनके खुलने वाले कोष्ठक की स्थिति के अनुसार। नॉन-कैप्चरिंग ग्रुप और lookaround को नंबर नहीं मिलता।
तकनीकी नोट्स
हाथ से लिखा गया रिकर्सिव-डिसेंट पार्सर ECMAScript ग्रामर के अनुरूप AST बनाता है (अल्टरनेशन → सीक्वेंस → क्वांटिफ़ाइड एटम)। हर नोड अपना कच्चा सोर्स, ऑफ़सेट और विवरण रखता है; यही पार्सर Regex टेस्टर में कैटास्ट्रॉफ़िक-बैकट्रैकिंग गार्ड भी चलाता है।
संदर्भ
- ECMAScript® Language Specification (ECMA-262)JavaScript भाषा का मानक, जिसमें RegExp का व्याकरण और अर्थ, JSON.parse/JSON.stringify और Date ऑब्जेक्ट शामिल हैं।
- Regular expressions — JavaScript guide — MDNJavaScript इंजनों में लागू रेगुलर एक्सप्रेशन सिंटैक्स का व्यावहारिक संदर्भ: कैरेक्टर क्लास, ग्रुप, क्वांटिफ़ायर, फ़्लैग।
- OWASP Cheat Sheet Series: Input Validationअलाउ-लिस्ट वैलिडेशन, सिंटैक्टिक बनाम सेमांटिक जाँच, और क्लाइंट-साइड वैलिडेशन कभी सुरक्षा नियंत्रण क्यों नहीं है।