मुख्य सामग्री पर जाएँ
Tooletto

रेगुलर एक्सप्रेशन टेस्टर

JavaScript रेगुलर एक्सप्रेशन को सैंपल टेक्स्ट के ख़िलाफ़ लाइव हाइलाइटिंग, कैप्चर ग्रुप, नामित ग्रुप और रिप्लेस प्रीव्यू के साथ टेस्ट करें। पूरी तरह आपके ब्राउज़र में काम करता है।

  • फ़ाइलें कभी आपकी डिवाइस से बाहर नहीं जातीं
  • मुफ़्त, बिना साइन-अप
  • कोई वॉटरमार्क नहीं
  • लोड होने के बाद ऑफ़लाइन भी काम करता है
Loading tool…

रेगुलर एक्सप्रेशन टेस्टर कैसे करें

  1. 1

    अपना पैटर्न डालें

    एक्सप्रेशन टाइप करें और ज़रूरी फ़्लैग चुनें।

  2. 2

    टेस्ट टेक्स्ट जोड़ें

    आपके टाइप करते ही मैच हाइलाइट होते हैं, हर कैप्चर ग्रुप लिस्ट किया जाता है।

  3. 3

    रिप्लेस टेस्ट करें

    रिप्लेस टैब $1 जैसे रेफ़रेंस इस्तेमाल करते हुए नतीजे का प्रीव्यू दिखाता है।

किसी पैटर्न को दिमाग़ में पढ़ने से लाइव हाइलाइटिंग बेहतर क्यों है

किसी रेगुलर एक्सप्रेशन को असली टेक्स्ट के ख़िलाफ़ मानसिक रूप से ट्रैक करना वाक़ई मुश्किल है — `(\d{3})-(\d{2})-(\d{4})` जैसा पैटर्न अमूर्त वर्णन के रूप में काफ़ी पढ़ने लायक़ है, लेकिन यह पुष्टि करना कि यह किसी ख़ास सैंपल टेक्स्ट ब्लॉक के ख़िलाफ़ ठीक उन्हीं इच्छित सबस्ट्रिंग से मैच करता है, सिर्फ़ उनसे, पैटर्न पढ़ने और उस पर तर्क करने से अलग तरह की जाँच है। पैटर्न टाइप करते समय हर मैच को सीधे सैंपल टेक्स्ट में हाइलाइट करना उस अमूर्त तर्क को एक ठोस, तुरंत विज़ुअल पुष्टि में बदल देता है — मैच वहाँ दिखते हैं जहाँ उम्मीद थी या नहीं दिखते, बिना किसी मानसिक सिमुलेशन की ज़रूरत के।

यह उन सभी चीज़ों के लिए ख़ास तौर पर उपयोगी बन जाता है जो lookahead, lookbehind, या ग़ैर-लालची (non-greedy) क्वांटिफ़ायर इस्तेमाल करती हैं, जहाँ असली मैच सीमाएँ अक्सर वैसी नहीं होतीं जिनका सिर्फ़ पैटर्न पढ़कर कोई अंदाज़ा लगाएगा। यह ठीक-ठीक देखना कि कोई मैच कहाँ शुरू और ख़त्म होता है, मान लेने की बजाय, किसी सीमा की एक-कम-या-एक-ज़्यादा की ग़लती को किसी वैलिडेशन फ़ंक्शन में पब्लिश हो जाने के बाद की बजाय तुरंत पकड़ लेता है।

JavaScript की regex, PCRE या Python के re जैसी भाषा नहीं है

रेगुलर एक्सप्रेशन सिंटैक्स भाषाओं के बीच ऊपरी तौर पर एक जैसा दिखता है, लेकिन सपोर्ट किए गए ख़ास फ़ीचर ऐसे तरीक़ों से अलग हैं जो तब मायने रखते हैं जब कोई पैटर्न बुनियादी बातों से आगे कुछ इस्तेमाल करता है। JavaScript में possessive क्वांटिफ़ायर और atomic ग्रुप नहीं हैं, दोनों PCRE (PHP और कई दूसरे टूल में इस्तेमाल) में मौजूद हैं ताकि कुछ बैकट्रैकिंग पैटर्न को साफ़ तौर पर रोका जा सके। Lookbehind असर्शन, जो अब JavaScript में सपोर्टेड हैं, lookahead से काफ़ी बाद में आए और पुराने ब्राउज़र वर्ज़न में उपलब्ध नहीं थे, जो लेगेसी वातावरण में चलने वाले कोड के लिए अब भी कभी-कभी मायने रखता है। और JavaScript पैटर्न में `\d` सिर्फ़ ASCII अंक 0–9 से मैच करता है जब तक पैटर्न में `u` (Unicode) फ़्लैग भी न हो, जो किसी को भी हैरान करता है जो मान लेता है कि यह किसी दूसरी भाषा के regex इंजन में Unicode-जागरूक अंक क्लास जैसा व्यवहार करता है। किसी ऐसे पैटर्न को टेस्ट करना जो ख़ास तौर पर JavaScript के लिए है, न कि Python या किसी शेल टूल के लिए लिखा उदाहरण कॉपी करना, वही चीज़ है जिसके लिए यह टूल बना है।

भयावह बैकट्रैकिंग, और टेस्टर के पास टाइम बजट क्यों है

कुछ regex पैटर्न — सबसे आम तौर पर नेस्टेड क्वांटिफ़ायर वाले, जैसे `(a+)+b` — में एक बीमार गुण होता है जहाँ, किसी लंबी स्ट्रिंग के ख़िलाफ़ जो आख़िर में मैच नहीं करती, इंजन हार मानने से पहले बैकट्रैक करने के एक्सपोनेंशियल रूप से बढ़ते तरीक़ों को खोजता है। कोई पैटर्न जो दस-कैरेक्टर वाली न-मैच होने वाली स्ट्रिंग के ख़िलाफ़ तुरंत नतीजे देता है वह पचास-कैरेक्टर वाली स्ट्रिंग के ख़िलाफ़ ब्रह्मांड की उम्र से भी ज़्यादा समय ले सकता है, जो कोई बढ़ा-चढ़ाकर कहा दावा नहीं बल्कि एक्सपोनेंशियल वृद्धि का शाब्दिक गणितीय व्यवहार है। यह प्रोडक्शन सिस्टम में एक असली और फ़ायदा उठाने लायक़ ख़तरे की श्रेणी है — एक ReDoS, या रेगुलर एक्सप्रेशन डिनायल ऑफ़ सर्विस — जहाँ कोई हमलावर जो किसी कमज़ोर पैटर्न के लिए इनपुट स्ट्रिंग को कंट्रोल कर सकता है वह एक ही रिक्वेस्ट से किसी सर्वर प्रोसेस को अनिश्चित काल तक अटका सकता है।

यह टूल ख़ास तौर पर इसीलिए एक छोटे टाइम बजट के बाद इवैल्यूएशन रोक देता है ताकि इस गुण वाला कोई पैटर्न पूरे ब्राउज़र टैब की बजाय सिर्फ़ टेस्ट सेशन को फ़्रीज़ करे, और उस रुकावट तक पहुँचना ख़ुद में उपयोगी जानकारी है: इसका मतलब है कि पैटर्न में शायद ठीक यही कमज़ोरी है और उसे दोबारा बनाने की ज़रूरत है, आमतौर पर किसी अंदरूनी क्वांटिफ़ायर को ज़्यादा ख़ास बनाकर ताकि वह अस्पष्टता जो एक्सपोनेंशियल बैकट्रैकिंग का कारण बनती है वह पहली जगह पैदा ही न हो सके।

अक्सर पूछे जाने वाले सवाल

यह कौन सी regex बोली है?

JavaScript (ECMAScript), जो आपके ब्राउज़र में चलती है। यह PCRE और Python से कुछ बिंदुओं पर अलग है — बहुत पुराने ब्राउज़र में lookbehind नहीं, कोई possessive क्वांटिफ़ायर या atomic ग्रुप नहीं, और `\d` सिर्फ़ ASCII अंकों से मैच करता है जब तक आप `u` फ़्लैग इस्तेमाल न करें।

ग्लोबल फ़्लैग असल में क्या बदलता है?

`g` के बिना, सिर्फ़ पहला मैच ढूँढा जाता है। इसके साथ, सभी मैच वापस दिए जाते हैं — जो आपको पूरे दस्तावेज़ में हाइलाइट या रिप्लेस करने के लिए चाहिए। यह टूल वैसे भी सभी मैच दिखाता है, लेकिन फ़्लैग फिर भी `replace` के व्यवहार को प्रभावित करता है।

मेरा पैटर्न टाइमआउट क्यों हुआ?

कुछ पैटर्न भयावह तरीक़े से बैकट्रैक करते हैं — `(a+)+b` जैसे नेस्टेड क्वांटिफ़ायर किसी न-मैच होने वाली स्ट्रिंग पर एक्सपोनेंशियल समय ले सकते हैं। यह टूल आपके टैब को फ़्रीज़ करने की बजाय एक छोटे टाइम बजट के बाद रुक जाता है। अगर ऐसा हो, तो उपाय लगभग हमेशा अंदरूनी क्वांटिफ़ायर को ज़्यादा ख़ास बनाना है।

मैं रिप्लेस में कैप्चर ग्रुप कैसे इस्तेमाल करूँ?

उन्हें `$1`, `$2` वगैरह के रूप में रेफ़र करें, या `(?<नाम>…)` लिखे नामित ग्रुप के लिए `$<नाम>`। पूरे मैच के लिए `$&` इस्तेमाल करें और शब्दशः डॉलर चिह्न के लिए `$$`।