«नियमित अभिव्यक्ति का परीक्षण» का क्या अर्थ है ?
नियमित अभिव्यक्ति का परीक्षण («regex test online», «tester regex javascript») का मतलब है किसी वास्तविक टेक्स्ट पर पैटर्न चलाना और ठीक-ठीक देखना कि इंजन क्या लौटाता है : मिले हुए स्ट्रिंग, उनकी स्थिति, और कैप्चर समूहों का मान। «सही लगने» वाला पैटर्न तब तक कुछ नहीं कहता जब तक वह आपके डेटा पर न चले — ट्यूटोरियल वाली regex और प्रोडक्शन वाली regex के बीच यही एकमात्र फ़र्क है जो मायने रखता है।
परीक्षण तीन अलग-अलग सवालों के जवाब देता है। क्या यह मैच करता है : मैच तालिका उसी पंक्ति पर बता देती है। कहाँ और कितना : इंडेक्स और लंबाई बताते हैं कि एंकर सही जगह पर था या नहीं। यह क्या कैप्चर करता है : नंबर या नाम वाले समूह बताते हैं कि जो हिस्सा आप निकालना चाहते थे वह सचमुच वही है या नहीं।
वे मेटाकैरेक्टर जो पूरा फ़र्क डालते हैं
बिंदु . कोई भी वर्ण बदल देता है, नई पंक्ति को छोड़कर — इसीलिए फ्लैग s जब आपका टेक्स्ट मल्टी-लाइन हो। क्वांटिफायर *, + और ? सभी ग्रीडी होते हैं : यह पर्याप्त पुनरावृत्ति संख्या पर रुक जाते हैं। सफ़िक्स ? (*?, +?, {2,5}?) इस व्यवहार को उलट देता है और देता है लाजी संस्करण, जो लगभग हमेशा पसंद करना चाहिए जब कोई .* लाइन का अंत निगल जाता हो।
कोष्ठक एक क्लास बनाते हैं : [abc] सूची में से एक वर्ण स्वीकार करता है, [^abc] उन्हें छोड़कर सब, [a-z0-9] एक दायरा। क्लास की शुरुआत में नेगेशन का ध्यान रखें — [^...] सिर्फ पहली स्थिति के लिए, अन्यथा ^ फिर से शाब्दिक हो जाता है। पाइप | विकल्पों को अलग करता है और निम्न प्राथमिकता की तरह व्यवहार करता है : ^cat|dog$ का मतलब है « पूरा टेक्स्ट cat है » या « पूरा टेक्स्ट dog है », « शुरुआत या अंत पर cat या dog » नहीं — ऐसे में समूह बनाना होगा : ^(?:cat|dog)$.
समूह, lookahead और lookbehind
पैरेंथेसिस कैप्चर करती हैं। समूह 1 इससे पहुँचा जाता है $1 प्रतिस्थापन पक्ष में और \1 पैटर्न पक्ष में, नामित समूह इससे $<nom> और \k<nom> — तीन समूहों से कहीं ज़्यादा पठनीय। (?:...) बिना नंबर बनाए समूह बनाता है, जब आप सिर्फ संरचना के लिए कैप्चर कर रहे हों तो यही पसंद करें।
असर्शन (lookaround) बिना खपाए जाँच करते हैं : (?=...) माँग करता है कि जो आगे है वह मिले, (?!...) उसे मना करता है, (?<=...) और (?<!...) पीछे के लिए भी यही करते हैं। इसी तरह पासवर्ड में विशेष अंक अनिवार्य किया जाता है बिना उसे कैप्चर में शामिल किए : ^(?=.*\d)(?=.*[A-Z]).{12,}$.
ReDoS : जब regex समय-बम बन जाए
यह ReDoS (Regular Expression Denial of Service) backtracking से आता है : लगभग मेल खाते इनपुट के सामने, जैसा पैटर्न (a+)+$ विफल होने से पहले « a » को काटने के सभी तरीके आज़माता है, और विस्फोटों की संख्या घातांकीय रूप से बढ़ती है। दो आदतें : पैटर्न को यथार्थवादी वॉल्यूम पर टेस्ट करना — «परफ़ॉर्मेंस» टैब यह आपके लिए करता है — और बाहर से आए, आकार-सीमारहित इनपट पर कभी भी अनऑडिटेड regex न चलाना। सर्वर पर अटकी हुई regex पूरे worker को timeout समाप्त होने तक जमा देती है।
JavaScript, PCRE, Python : वही आधार, कुछ फ़र्क
टेस्टर ब्राउज़र के नेटिव इंजन यानी ECMAScript का उपयोग करता है। बुनियादी सिंटैक्स — क्लास, क्वांटिफायर, समूह, lookahead, फ्लैग g i m s u y — PCRE (PHP, Perl) और Python के re, Java और Go में साझे हैं। फ़र्क मुख्यतः lookbehind (JavaScript में लंबे समय तक अनुपस्थित, अब समर्थित), Unicode प्रॉपर्टी और ऐसे इनलाइन फ्लैग पर हैं जैसे (?i), जो केवल PCRE के हैं। इसलिए एक भाषा से दूसरी भाषा में पैटर्न का अनुवाद करना बारीकी का काम है — आविष्कार का नहीं।
इनके लिए उपयुक्त
फ्रंट-एंड और बैक-एंड डेवलपर्स (फ़ॉर्म वैलिडेशन, लॉग पार्सिंग, डेटा माइग्रेशन), ऑप्स और DevOps (कॉन्फ़िगरेशन फ़िल्टर, WAF नियम), टेस्टर और एनालिस्ट (कॉलम एक्सट्रैक्शन, फ़ॉर्मेट जाँच), कंटेंट राइटर और डेटा एनालिस्ट (फ़ाइल सफ़ाई), छात्र (मेटाकैरेक्टर समझने के लिए), और हर वह व्यक्ति जिसे एक नियमित अभिव्यक्ति टेस्टर तेज़, पूर्ण और गोपनीय — साथ में JSON फ़ॉर्मेटर, URL एन्कोडर-डीकोडर, Base64 एन्कोडर-डीकोडर और JWT एन्कोडर-डीकोडर.