रेगेक्स टेस्टर
डेवमैच हाइलाइटिंग और कैप्चर समूहों के साथ JavaScript नियमित अभिव्यक्तियों का परीक्षण करें।
इस पृष्ठ पर
रेगेक्स टेस्टर क्या है?#
एक नियमित अभिव्यक्ति (regex) पाठ में पैटर्न का वर्णन करने के लिए एक सघन संकेतन है: “हर चीज़ जो ईमेल जैसी दिखती है”, “प्रत्येक पंक्ति का तीसरा शब्द”, “सभी संख्याएँ जो उद्धरण चिह्नों के भीतर नहीं हैं”। पैटर्न लिखना केवल आधा काम है — दूसरा आधा यह देखना है कि यह वास्तव में क्या मैच करता है, आपके जैसे पाठ पर, इससे पहले कि आप इसे प्रोडक्शन कोड में चिपकाएँ। एक रेगेक्स टेस्टर वह पेज है जहाँ आप यह करते हैं।
यह टूल आपके पैटर्न को आपके नमूना पाठ के विरुद्ध वास्तविक समय में चलाता है, हर मैच को उसी स्थान पर हाइलाइट करता है, और प्रत्येक कैप्चर समूह को अलग से सूचीबद्ध करता है ताकि आप पुष्टि कर सकें न केवल कि यह मैच किया, बल्कि क्या कैप्चर किया। यह JavaScript रेगेक्स इंजन उपयोग करता है (वही जो आपका ब्राउज़र और Node पहले से बोलते हैं), इसलिए यहाँ व्यवहार वही मेल खाता है जो आपका कोड करेगा।
इसका उपयोग कैसे करें#
- ऊपर-बाईं ओर दो
/चिह्नों के बीच पैटर्न दर्ज करें। आप स्वयं स्लैश टाइप नहीं करते — वे आपके लिए बनाए गए हैं, जैसे कोड में एक शाब्दिक regex लिखा जाता है। - पैटर्न के दाईं ओर छोटे बॉक्स में फ़्लैग दर्ज करें। जिन्हें आप सबसे अधिक उपयोग करेंगे:
g— केवल पहला नहीं, सभी मैच ढूँढें।i— केस-असंवेदनशील।m—^और$केवल पूरी स्ट्रिंग नहीं, प्रत्येक पंक्ति के प्रारंभ और अंत से मैच करते हैं।s—.को नई पंक्तियों से भी मैच करने दें।u— पैटर्न को Unicode मानें (इमोजी और ग़ैर-ASCII के लिए मायने रखता है)।
- नीचे के बॉक्स में अपना परीक्षण टेक्स्ट चिपकाएँ। ऐसा पाठ उपयोग करें जो वास्तव में आपके वास्तविक इनपुट जैसा हो — ऐसा पैटर्न जो साफ़-सुथरे उदाहरणों पर काम करता है अक्सर गंदे डेटा पर गलत व्यवहार करता है।
- दाईं ओर हाइलाइट किया गया पूर्वावलोकन पढ़ें: हर मैच संदर्भ में, उसी स्थान पर दिखाया गया है। इसके नीचे, प्रत्येक कैप्चर समूह अपने सूचकांक, कैप्चर किए गए पाठ, और ऑफ़सेट के साथ सूचीबद्ध है जहाँ यह मिला।
मुख्य विशेषताएँ#
- लाइव हाइलाइटिंग। हर मैच मूल पाठ के विरुद्ध उसी स्थान पर रेंडर होता है, ताकि आप एक नज़र में सीमाएँ देख सकें — उस अजीब मामले सहित जहाँ कोई मैच रिक्ति के पार चला जाता है।
- प्रति-समूह कैप्चर सूची। समूह सूचकांक, मैच की गई उपस्ट्रिंग, और अक्षर ऑफ़सेट, प्रति कैप्चर एक पंक्ति। आवश्यक जब किसी पैटर्न में तीन-चार समूह हों और आप जानना चाहें कि कौन-सा क्या है।
- एक साथ कई फ़्लैग।
g,i,m,s,uको स्वतंत्र रूप से संयोजित करें (उदाहरण के लिएgiuग्लोबल, केस-असंवेदनशील, Unicode-जागरूक के लिए)। - ReDoS पूर्व-सूचना। कुछ पैटर्न — आमतौर पर
(a+)+जैसे नेस्टेड क्वांटिफ़ायर — निर्मित इनपुट पर घातीय रूप से विस्फोट कर सकते हैं। स्थिति पंक्ति पैटर्न स्वयं को मैच के क्षण चिह्नित करती है, आपको इसे सरल बनाने के लिए प्रेरित करती है इससे पहले कि यह कभी शत्रुतापूर्ण इनपुट से मिले। जाँच आपके पैटर्न के आकार को पढ़ती है; यह मापती नहीं कि पिछली बार कितना समय लिया, और एक सचमुच विनाशकारी पैटर्न अभी भी टैब लॉक कर सकता है — इसलिए चेतावनी पर ध्यान दें। - डिज़ाइन द्वारा सीमित। इनपुट 250 000 अक्षरों पर सीमित है और मैच सूची कुछ हज़ार प्रविष्टियों के बाद बढ़ना बंद करती है (कैप्चर पैनल पहले 200 दिखाता है), इसलिए किसी बड़ी फ़ाइल की आकस्मिक चिपकान चुपचाप हमेशा नहीं चल सकती।
- कोई राउंड-ट्रिप नहीं। पैटर्न और पाठ आपके ब्राउज़र में संसाधित होते हैं; कुछ भी कहीं नहीं भेजा जाता।
विस्तृत उदाहरण#
मान लीजिए आपके पास लॉग पंक्तियों की एक सूची है और आप उन पंक्तियों से method और path निकालना चाहते हैं जो किसी HTTP verb से शुरू होती हैं। यह पैटर्न उपयोग करें:
(\w+)\s+(/[\w/-]+)
फ़्लैग gm के साथ, और इसके विरुद्ध परीक्षण करें:
GET /api/users
POST /api/login
DELETE /api/users/42
not a log line
PUT /api/items/3-qty
टूल पहली, दूसरी, तीसरी और पाँचवीं पंक्तियाँ हाइलाइट करता है (चौथी किसी शब्द से शुरू नहीं होती जिसके बाद पथ हो)। कैप्चर सूची प्रत्येक मैच के लिए method और path अलग-अलग रिपोर्ट करती है — इसलिए DELETE समूह 1 है और /api/users/42 समूह 2, और आप पुष्टि कर सकते हैं कि path समूह अंतिम पंक्ति पर अनुगामी -qty खंड सही ढंग से शामिल करता है।
अक्सर पूछे जाने वाले प्रश्न#
यह कौन-सा रेगेक्स स्वाद उपयोग करता है?#
JavaScript का अंतर्निहित इंजन — वही जो String.prototype.match, RegExp.prototype.exec, और Node के regex शाब्दिक द्वारा उपयोग होता है। एक पैटर्न जो यहाँ काम करता है वह आपके फ्रंटएंड कोड या आपके Node सर्वर में अपरिवर्तित काम करेगा। यह PCRE, RE2 या Rust का regex नहीं है; यदि आप किसी PHP या Go कोडबेस से पैटर्न कॉपी करते हैं, तो इस पर भरोसा करने से पहले यहाँ परीक्षण करें।
टूल संभावित ReDoS की चेतावनी देता है। इसका क्या मतलब है?#
कुछ पैटर्न को शत्रुतापूर्ण इनपुट पर बहुत लंबे समय तक चलाया जा सकता है — क्लासिक उदाहरण (a+)+b है जिसे a की एक स्ट्रिंग के विरुद्ध बिना अनुगामी b के मैच किया जाता है। हमलावर इसका फ़ायदा उठाकर रेगेक्स-आधारित सेवाओं को सेवा-अस्वीकृत करते हैं। चेतावनी आपके पैटर्न के आकार की एक स्थैतिक पठन है (नेस्टेड क्वांटिफ़ायर, अतिव्यापी विकल्प); यह तब सक्रिय होती है जब ऐसा पैटर्न मैच उत्पन्न करता है, पिछली बार कितना समय लिया इस पर आधारित नहीं। यदि आप इसे देखें, तो पैटर्न सरल बनाएँ: नेस्टेड क्वांटिफ़ायर हटाएँ, इसे एंकर करें, या atomic समूह उपयोग करें यदि आपका लक्ष्य इंजन उन्हें समर्थन करता है।
मेरा पैटर्न केवल एक बार क्यों मैच करता है?#
संभवतः आपके पास g फ़्लैग नहीं है। g के बिना, एक JavaScript regex पहले मैच पर रुक जाता है। हर ग़ैर-अतिव्यापी घटना ढूँढने के लिए g जोड़ें।
क्या . नई पंक्तियों से मैच करता है?#
डिफ़ॉल्ट रूप से नहीं — . एक पंक्ति-समापक के अतिरिक्त किसी भी अक्षर से मैच करता है। s फ़्लैग जोड़ें (कभी-कभी “dotall” कहा जाता है) यदि आप चाहते हैं कि . नई पंक्तियों को विस्तृत करे, जो तब उपयोगी है जब ऐसे ब्लॉक मैच करते हैं जिनमें पंक्ति विराम हों।