रेगुलर एक्सप्रेशन (Regex) शुरुआती गाइड

रेगुलर एक्सप्रेशन (regex) एक कॉम्पैक्ट पैटर्न है जो स्ट्रिंग के सेट का वर्णन करता है। एक एक्सप्रेशन लॉग में हर ईमेल एड्रेस ढूँढ सकता है, फ़ोन नंबर फ़ील्ड वैलिडेट कर सकता है, URL से ऑर्डर id निकाल सकता है या एक साथ हज़ार फ़ाइलें रीनेम कर सकता है। हर मुख्य लैंग्वेज — JavaScript, Python, Java, Go, C#, PHP — और हर एडिटर व कमांड-लाइन टूल एक ही कोर सिंटैक्स समझता है।

यह गाइड वही कोर सिखाती है: लिटरल कैरेक्टर, कैरेक्टर क्लास, क्वांटिफ़ायर, एंकर, ग्रुप और फ़्लैग — चीट शीट, कॉपी करने लायक पैटर्न, और वे गलतियाँ जिनसे regex बहुत ज़्यादा या बहुत कम मैच करता है।

लिटरल कैरेक्टर और मेटाकैरेक्टर

ज़्यादातर कैरेक्टर खुद से मैच करते हैं: पैटर्न cat "concatenate" के अंदर "cat" से मैच करता है। चौदह कैरेक्टर का ख़ास मतलब है (ECMAScript स्पेसिफ़िकेशन इन्हें syntax characters कहता है) और उन्हें लिटरली मैच करने के लिए बैकस्लैश से एस्केप किया जाता है: . ^ $ * + ? ( ) [ ] { } | और ख़ुद बैकस्लैश \। फ़ॉरवर्ड स्लैश / इनमें नहीं है; उसे सिर्फ़ /a\/b/ जैसे JavaScript regex लिटरल के अंदर एस्केप करना पड़ता है, जहाँ वह वरना पैटर्न ख़त्म कर देता। डॉट सबसे ज़्यादा धोखा देता है — a.b "a", फिर कोई भी कैरेक्टर, फिर "b" से मैच करता है, इसलिए "a.b" "aXb" से भी मैच करता है।

नीचे के ब्लॉक के उदाहरण: colou?r "color" और "colour" दोनों से मैच करता है क्योंकि ? अक्षर u को वैकल्पिक बनाता है; \d{3}-\d{4} 555-1234 जैसे नंबर से मैच करता है; \. लिटरल डॉट से मैच करता है; https?:// http:// और https:// दोनों से मैच करता है।

colou?r       matches "color" and "colour"
\d{3}-\d{4}   matches 555-1234
\.            matches a literal dot
https?://     matches http:// and https://

आज़माएँ: Regex टेस्टर

कैरेक्टर क्लास

  • [abc] — a, b या c में से एक। [a-z] — कोई भी लोअर-केस अक्षर। [^0-9] — अंक के अलावा कुछ भी।
  • \d — अंक [0-9]। \w — वर्ड कैरेक्टर [A-Za-z0-9_]। \s — व्हाइटस्पेस (स्पेस, टैब, न्यूलाइन)। अपर केस उल्टा करता है: \D, \W, \S।
  • . — न्यूलाइन के अलावा कोई भी कैरेक्टर (जब तक s फ़्लैग सेट न हो)।
  • Unicode — JavaScript में \w और \d u या v फ़्लैग के साथ भी सिर्फ़ ASCII तक सीमित रहते हैं। इनकी जगह u फ़्लैग के साथ प्रॉपर्टी एस्केप इस्तेमाल करें: किसी भी अक्षर के लिए \p{L}, हिंदी के लिए \p{Script=Devanagari}, अरबी अक्षरों के लिए \p{Script=Arabic}। हिंदी की मात्राएँ और अरबी के हरकत-चिह्न combining marks (\p{M}) हैं, अक्षर नहीं, इसलिए पूरा शब्द \p{L}+ से नहीं बल्कि [\p{L}\p{M}]+ से मैच करें।

क्वांटिफ़ायर: कितनी बार

  • * — शून्य या ज़्यादा। + — एक या ज़्यादा। ? — शून्य या एक।
  • {3} — ठीक तीन। {2,5} — दो से पाँच। {2,} — दो या ज़्यादा।
  • क्वांटिफ़ायर लालची (greedy) होते हैं: .* जितना हो सके उतना लेता है। आलसी (lazy) बनाने के लिए ? जोड़ें: .*? पहले मौके पर रुक जाता है। "<a><b>" पर <.+> पूरी स्ट्रिंग मैच करता है; <.+?> "<a>" मैच करता है।
लालची <.+> जहाँ तक पहुँच सके, आख़िरी > तक जाता है;? जोड़ने पर वह आलसी हो जाता है और पहले > पर रुक जाता है।

<.+>लालची (greedy)

जितना हो सके उतना लेता है: पूरी स्ट्रिंग

[match: <a><b> — match का अंत]

<.+?>आलसी (lazy)

पहले मौके पर रुक जाता है: सिर्फ़ <a>

[match: <a> — match का अंत]<b>

हाइलाइट: हर इनपुट का वह हिस्सा जो पैटर्न मैच करता है, जैसा JavaScript ढूँढता है।

आज़माएँ: Regex एक्सप्लेनर

एंकर, ग्रुप और ऑल्टरनेशन

  • ^ — स्ट्रिंग की शुरुआत (m फ़्लैग के साथ लाइन की)। $ — अंत। \b — वर्ड बाउंड्री, इसलिए \bcat\b "cat" मैच करता है लेकिन "concatenate" नहीं।
  • ( ) — कैप्चरिंग ग्रुप: (\d{4})-(\d{2}) साल और महीना अलग-अलग कैप्चर करता है। (?: ) बिना कैप्चर ग्रुप करता है। (?<year>\d{4}) ग्रुप को नाम देता है।
  • | — ऑल्टरनेशन: jpg|png|gif तीनों में से किसी से मैच करता है। स्कोप सीमित करने के लिए ग्रुप में लपेटें: \.(jpg|png|gif)$।
  • (?=…) और (?!…) — लुकअहेड: सिर्फ़ तब मैच करें जब आगे का हिस्सा मैच करे (या न करे), उसे कंज़्यूम किए बिना। पासवर्ड नियमों में इस्तेमाल: ^(?=.*\d)(?=.*[A-Z]).{12,}$।

फ़्लैग

  • i — केस-इनसेंसिटिव। g — ग्लोबल (सिर्फ़ पहला नहीं, सभी मैच ढूँढें)। m — मल्टीलाइन: ^ और $ लाइन बाउंड्री पर मैच करते हैं।
  • s — डॉटऑल: . न्यूलाइन से भी मैच करता है। u — Unicode मोड। x (कुछ इंजन) — पैटर्न में व्हाइटस्पेस नज़रअंदाज़ और कमेंट की अनुमति।

कॉपी करने लायक पैटर्न

नीचे के ब्लॉक में पैटर्न इस क्रम में हैं: ईमेल (प्रैक्टिकल पैटर्न, स्पेसिफ़िकेशन के हर केस को नहीं ढकता), भारतीय मोबाइल नंबर, सऊदी मोबाइल नंबर, YYYY-MM-DD वाली ISO तारीख़, UUID, URL (ढीली जाँच), Hex रंग, मज़बूत पासवर्ड (कम से कम 12 कैरेक्टर, जिनमें छोटा अक्षर, बड़ा अक्षर, अंक और चिह्न हों), टेक्स्ट के शुरू और अंत की व्हाइटस्पेस हटाना, और /orders/ पाथ से ऑर्डर id निकालना।

Email (practical):    ^[^\s@]+@[^\s@]+\.[^\s@]{2,}$
Indian mobile:        ^(?:\+91|0)?[6-9]\d{9}$
Saudi mobile:         ^(?:\+966|0)5\d{8}$
ISO date:             ^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$
UUID:                 ^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
URL (loose):          ^https?://[^\s/$.?#].[^\s]*$
Hex color:            ^#(?:[0-9a-fA-F]{3}){1,2}$
Strong password:      ^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[^\w\s]).{12,}$
Trim whitespace:      ^\s+|\s+$
Extract order id:     /orders/(\d+)

आज़माएँ: Regex टेस्टर आज़माएँ: Regex जनरेटर

वे गलतियाँ जिनसे बहुत ज़्यादा या बहुत कम मैच होता है

  • एंकर भूलना: \d{4} 12345 को "वैलिडेट" कर देता है क्योंकि उसके अंदर 1234 मिल जाता है। ^\d{4}$ इस्तेमाल करें।
  • बिना एस्केप डॉट: example.com "exampleXcom" से मैच करता है। example\.com लिखें।
  • पूरी लाइन में लालची क्वांटिफ़ायर: दो कोटेड स्ट्रिंग वाली लाइन पर "(.*)" दोनों कैप्चर कर लेता है।
  • कैटास्ट्रोफ़िक बैकट्रैकिंग: (a+)+ जैसे नेस्टेड क्वांटिफ़ायर न मैच करने वाले इनपुट पर सेकंडों ले सकते हैं या हैंग हो सकते हैं। क्वांटिफ़ायर सरल रखें और लंबे इनपुट से टेस्ट करें।
  • विशाल पैटर्न से ईमेल वैलिडेट करना: ऊपर का प्रैक्टिकल पैटर्न और एक कन्फ़र्मेशन ईमेल 400-कैरेक्टर regex से बेहतर है जो फिर भी वैध एड्रेस रिजेक्ट करता है।
  • लोकेल की धारणाएँ: JavaScript में \w हिंदी या अरबी अक्षरों से कभी मैच नहीं करता, Unicode मोड में भी नहीं। u फ़्लैग के साथ [\p{L}\p{M}] इस्तेमाल करें।
एंकर के बिना पैटर्न इनपुट का एक हिस्सा मैच कर सकता है, और बिना एस्केप डॉट कोई भी कैरेक्टर; दोनों सुधार इन इनपुट को रिजेक्ट करते हैं।

\d{4}एंकर भूलना

12345 के अंदर 1234 मिल जाता है, इसलिए 12345 “वैलिडेट” हो जाता है

[match: 1234 — match का अंत]5

^\d{4}$सुधार

^ और $ पैटर्न को पूरे इनपुट से बाँधते हैं: कोई मैच नहीं

12345

example.comबिना एस्केप डॉट

डॉट कोई भी कैरेक्टर मैच करता है, यहाँ X

[match: exampleXcom — match का अंत]

example\.comसुधार

\. सिर्फ़ लिटरल डॉट मैच करता है: कोई मैच नहीं

exampleXcom

हाइलाइट: हर इनपुट का वह हिस्सा जो पैटर्न मैच करता है, जैसा JavaScript ढूँढता है।

आज़माएँ: Regex टेस्टर आज़माएँ: Regex एक्सप्लेनर

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

रेगुलर एक्सप्रेशन किस काम आता है?

पैटर्न फ़ॉलो करने वाले टेक्स्ट को ढूँढने, वैलिडेट करने, निकालने और बदलने में: फ़ॉर्म वैलिडेशन, लॉग सर्च, स्ट्रिंग से id निकालना, बल्क रीनेम और एडिटर में सर्च-एंड-रिप्लेस।

regex में \d का क्या मतलब है?

कोई एक अंक, 0–9। \d{3} का मतलब ठीक तीन अंक; \d+ का मतलब एक या ज़्यादा।

regex में * और + में क्या फ़र्क़ है?

* शून्य या ज़्यादा दोहराव मैच करता है (एलिमेंट गैरहाज़िर भी हो सकता है); + कम से कम एक माँगता है।

क्या regex हर लैंग्वेज में एक जैसा है?

कोर सिंटैक्स साझा है, लेकिन डिटेल अलग हैं: लुकबिहाइंड सपोर्ट, नेम्ड ग्रुप, Unicode क्लास और फ़्लैग JavaScript, Python (re), Java, PCRE (PHP) और Go (RE2, जिसमें बैकट्रैकिंग नहीं) में अलग होते हैं।

regex कैसे टेस्ट करें?

पैटर्न और सैंपल टेक्स्ट को ऐसे टेस्टर में पेस्ट करें जो मैच और ग्रुप हाइलाइट करे, फिर ऐसे इनपुट आज़माएँ जिन्हें मैच नहीं करना चाहिए। परफ़ॉर्मेंस समस्याएँ पकड़ने के लिए लंबे और असामान्य इनपुट शामिल करें।

क्या HTML या JSON पार्स करने के लिए regex इस्तेमाल कर सकते हैं?

एक बार के तेज़ एक्सट्रैक्शन के लिए, हाँ। किसी भरोसेमंद चीज़ के लिए, नहीं — नेस्टेड स्ट्रक्चर को असली पार्सर चाहिए। JSON के लिए JSON ट्री व्यूअर या JSONPath इस्तेमाल करें।

संदर्भ

  • ECMAScript® Language Specification (ECMA-262)Ecma International / TC39JavaScript भाषा का मानक, जिसमें RegExp का व्याकरण और अर्थ, JSON.parse/JSON.stringify और Date ऑब्जेक्ट शामिल हैं।
  • Regular expressions — JavaScript guide — MDNMDN Web Docs (Mozilla)JavaScript इंजनों में लागू रेगुलर एक्सप्रेशन सिंटैक्स का व्यावहारिक संदर्भ: कैरेक्टर क्लास, ग्रुप, क्वांटिफ़ायर, फ़्लैग।

अभ्यास

पार्सल ट्रैकिंग पेज के लिए तीन regex लिखें और रिव्यू करें

आपका काम

आप एक courier app (काल्पनिक) के "Track a parcel" फ़ीचर को टेस्ट कर रहे हैं: एक web form जो tracking number लेता है, एक status page, और उनके पीछे का API। नीचे के material में दो requirements, developer का form के लिए लिखा validation pattern, test environment में दिखी तीन status lines और server log का छोटा अंश है। आपको तीन जगह regular expression चाहिए: form validation की review के लिए, automated check के अंदर status line से values निकालने के लिए, और log में search के लिए।

पहले काग़ज़ पर काम करें, फिर हर pattern Regex टेस्टर में जाँचें: form pattern को step 2 के अपने हर input पर, और status-line व log patterns को material पर, जिसे sample text की तरह paste किया गया हो। हर pattern के लिए कम से कम एक ऐसा input आज़माएँ जिसे match नहीं होना चाहिए। गाइड की तरह JavaScript syntax इस्तेमाल करें। Step 2 के लिए वैलिडेशन टेस्ट जनरेटर field की line trackingNumber: string, required, length=13, pattern= और उसके बाद आपके सुधारे हुए pattern को validation test cases की checklist में बदल सकता है (खाली input, 12 और 14 characters, pattern तोड़ने वाली value)। Type string रखें: उसके बिना "Number" पर ख़त्म होने वाले field name को whole number मान लिया जाता है। Checklist में placeholders होते हैं, इसलिए concrete inputs आपको ही चुनने हैं। इसके लिए 20–30 मिनट रखें।

सामग्री
Courier app (काल्पनिक) - release 3.2 में "Track a parcel" आता है: form, status page, API

Requirements
  FR-21  Tracking number 13 characters का है: 2 letters, 9 digits, 2 letters, जैसे
         RB123456789SA। Letters lower case में टाइप हो सकते हैं; form search से पहले
         उन्हें upper case में बदल देता है।
  FR-22  Status page एक status line इस format में दिखाता है:
         Parcel <tracking number>: <status> <YYYY-MM-DD> <HH:MM> (<city>)
         जहाँ <status> इनमें से एक है: accepted, in transit, out for delivery, delivered।

Form में अभी का validation (JavaScript, कोई flag नहीं)
  [A-Z]{2}\d{9}[A-Z]{2}

Test environment में दिखी status lines
Parcel RB123456789SA: delivered 2026-10-02 14:05 (Riyadh)
Parcel CP987654321IN: out for delivery 2026-10-02 07:45 (New Delhi)
Parcel LX456789123SA: in transit 2026-10-01 09:30 (Jeddah)

Server log का अंश (हर line में एक request: time, method, path, status, duration)
2026-10-02T14:05:12Z GET /api/v2/parcels/RB123456789SA/events 200 83ms
2026-10-02T14:05:13Z GET /api/v2/parcels/RB123456789SA 503 1204ms
2026-10-02T14:05:14Z POST /api/v2/parcels 201 44ms
2026-10-02T14:05:15Z GET /api/v2/parcels/CP512345678IN 200 512ms
2026-10-02T14:05:16Z GET /api/v2/rates?from=RUH&to=DEL 500 31ms
2026-10-02T14:05:17Z GET /api/v2/parcels/EE500000000SA 404 12ms
2026-10-02T14:05:18Z POST /api/v2/parcels 502 2003ms
चरण
  1. Developer के pattern की FR-21 से तुलना गाइड की गलतियों की सूची के साथ करें: यह कौन-से inputs स्वीकार करता है जिन्हें reject करना चाहिए था, और कौन-से reject करता है जिन्हें स्वीकार करना चाहिए था? सुधारा हुआ pattern उसके flags के साथ लिखें।
  2. सुधारे हुए pattern के लिए test inputs लिखें: कम से कम तीन जो match होने चाहिए और छह जो नहीं, हर एक नियम के एक हिस्से (length, letters, digits, extra characters) को तोड़ने के लिए चुना हुआ।
  3. Status page के automated check के लिए named groups वाला एक pattern लिखें जो status line (FR-22) से tracking number, status, date, time और city निकाले। यह तीनों example lines से match हो और ऐसी line से match न हो जिसमें status की spelling ग़लत हो, जैसे "delivred"।
  4. ऐसा pattern लिखें जो log extract में सिर्फ़ वे lines ढूँढे जहाँ /api/v2/parcels path की request को 5xx status मिला। बताएँ कि इसे कौन-से flags चाहिए, यह कौन-सी lines match करता है, और अकेला 5\d\d काफ़ी क्यों नहीं है।
  5. Requirements जो सवाल खुला छोड़ती हैं उसे नोट करें, और यह भी कि आप किससे पूछेंगे।
मॉडल उत्तर दिखाएँ
मॉडल उत्तर

Step 1. Developer के pattern [A-Z]{2}\d{9}[A-Z]{2} में दो defects हैं, गाइड की गलतियों की सूची की दोनों दिशाओं में एक-एक। यह बहुत ज़्यादा मैच करता है क्योंकि इसमें anchors नहीं हैं: यह हर ऐसा input स्वीकार करता है जिसमें कहीं भी कोई valid number हो, इसलिए XRB123456789SAX, RB123456789SA123 और अंत में space वाला RB123456789SA सब पास हो जाते हैं। यह बहुत कम मैच करता है क्योंकि i flag के बिना [A-Z] rb123456789sa को reject करता है, जिसे FR-21 के अनुसार form को स्वीकार करना चाहिए। सुधारा हुआ pattern: i flag के साथ ^[A-Z]{2}\d{9}[A-Z]{2}$, JavaScript में /^[A-Z]{2}\d{9}[A-Z]{2}$/i; बिना flag ^[A-Za-z]{2}\d{9}[A-Za-z]{2}$ इसके बराबर है। दूसरा defect रिपोर्ट करने से पहले एक सावधानी: अगर form इस check से पहले input को upper case में बदल देता है, तो lower-case letters पहले ही पास हो जाते हैं। यह developer से पूछने का सवाल है, और test input rb123456789sa दोनों स्थितियों में इसे तय कर देता है।

Step 2. Match होने चाहिए: RB123456789SA, rb123456789sa (case) और CP987654321IN (दूसरा prefix और देश)। Match नहीं होने चाहिए: RB12345678SA (8 digits) और RB1234567890SA (10 digits), दोनों boundary lengths; RB123456789S (अंत में एक ही letter); R1123456789SA (letter की जगह digit); XRB123456789SAX और RB123456789SA123 (extra characters, जिन्हें सिर्फ़ anchors reject करते हैं); अंत में space वाला RB123456789SA (copy-paste के बाद आम); RB-123456789-SA (separators); और खाली input। हर invalid input नियम का ठीक एक हिस्सा तोड़ता है, इसलिए जब उनमें से कोई स्वीकार हो जाए तो आप जानते हैं कि pattern का कौन-सा हिस्सा ग़लत है। हर input का expected result "accepted" या "rejected" है, जैसे किसी भी validation test case में।

Step 3. FR-22 को पूरा करने वाला एक pattern: ^Parcel (?<id>[A-Z]{2}\d{9}[A-Z]{2}): (?<status>accepted|in transit|out for delivery|delivered) (?<date>\d{4}-\d{2}-\d{2}) (?<time>\d{2}:\d{2}) \((?<city>[^()]+)\)$। अहम बातें: status का alternation अपने ग्रुप के अंदर है, इसलिए उसका scope सिर्फ़ status है; ग्रुप के बिना लिखा accepted|in transit|… पूरे pattern को चार विकल्पों में बाँट देता और "in transit" वाले लगभग किसी भी टेक्स्ट से मैच कर जाता। City के आसपास के parentheses मेटाकैरेक्टर हैं, इसलिए लिटरल वाले \( और \) से एस्केप होते हैं। City \w+ नहीं बल्कि [^()]+ है: \w+ "Riyadh" से मैच करता है लेकिन space की वजह से "New Delhi" से नहीं, और जैसा गाइड चेतावनी देती है, page localised हो तो Arabic या Devanagari शहर के नाम से कभी नहीं; negated class, या u flag के साथ [\p{L}\p{M} ]+, दोनों को संभालता है। Anchors ^ और $ check को ऐसी line reject करने देते हैं जिसमें कुछ कम या ज़्यादा हो। पहली example line पर groups हैं: id = RB123456789SA, status = delivered, date = 2026-10-02, time = 14:05, city = Riyadh; दूसरी पर status = out for delivery और city = New Delhi। "delivred" वाली line बिल्कुल मैच नहीं होती, इसलिए check pass रिपोर्ट करने की बजाय fail होता है — ठीक वही जो test को चाहिए: ग़लत value स्वीकार करने वाला ढीला pattern test को तब pass करा देता है जब उसे fail होना चाहिए (false-negative result)। Test में हर group की तुलना expected value से करें, जैसे m.groups.status === "delivered"। Date group \d{4}-\d{2}-\d{2} यहाँ काफ़ी है क्योंकि test value की ही तुलना करता है; गाइड का सख़्त ISO date pattern तभी इस्तेमाल करें जब test का मकसद format ही हो। Automated check में pattern एक ही status line पर चलता है और उसे किसी flag की ज़रूरत नहीं; Regex टेस्टर में पूरे material पर आज़माने के लिए m flag चालू करें, जिसकी वजह step 4 में बताई गई है।

Step 4. Parcel paths पर सिर्फ़ दो 5xx responses ढूँढने वाला pattern: m flag के साथ ^\S+ \S+ /api/v2/parcels(?:/\S*)? 5\d\d \d+ms$, ताकि ^ और $ line boundaries पर मैच करें, और tester में हर match देखने के लिए g flag; JavaScript regex literal में slashes \/ लिखे जाते हैं। बाएँ से दाएँ पढ़ें: timestamp, method, path /api/v2/parcels जिसके बाद वैकल्पिक / और कुछ और non-space characters (/RB123456789SA या /RB123456789SA/events), 5 से शुरू होने वाला status, और duration। यह ठीक दो lines से मैच करता है: 503 वाली GET और 502 वाली POST। अकेला 5\d\d सात में से छह lines पर नौ matches देता है, क्योंकि यह digits कहीं भी ढूँढ लेता है: दो lines में RB123456789SA के अंदर 567, CP512345678IN के अंदर 512 और फिर 567, duration 512ms में फिर 512, EE500000000SA के अंदर 500, और /api/v2/rates पर 500, जो parcel path नहीं है; नौ में से सिर्फ़ 503 और 502 वे responses हैं जो आपको चाहिए। Status के दोनों ओर space, \s5\d\d\s, tracking number और duration के false matches हटा देता है लेकिन rates वाली line रह जाती है; path की शर्त उसे भी हटा देती है। m flag के बिना pattern कुछ भी मैच नहीं करता, क्योंकि तब ^ और $ का मतलब पूरे टेक्स्ट की शुरुआत और अंत होता है। यह वही नियम है जो form में था: context और anchors के बिना regex बहुत ज़्यादा मैच करता है।

Step 5. Product owner या developer के लिए खुले सवाल: form upper case में बदलने से पहले validate करता है या बाद में, और क्या input trim होता है (copy-paste से आया trailing space आम है)? Arabic keyboard पर Arabic-Indic digits में टाइप किए अंक स्वीकार होने चाहिए या convert? JavaScript में \d सिर्फ़ 0–9 से मैच करता है, इसलिए RB١٢٣٤٥٦٧٨٩SA reject होता है। FR-22 की status सूची पूरी है, और जब parcel का अभी कोई city न हो तो line कैसी दिखती है? और हर rejected input पर form कौन-सा error message दिखाता है, ताकि test उसे assert कर सके?

अगर आपके patterns अलग हैं, तो उन्हें Regex टेस्टर में जाँचें। Form pattern को step 2 के हर input पर (या सब पर एक साथ, हर line में एक, m flag के साथ) आज़माने पर वह तीनों valid inputs स्वीकार करे और बाकी सब reject करे। m flag के साथ material पर status-line pattern तीनों status lines को सही group values के साथ मैच करे और ग़लत spelling वाली line जोड़ने पर उसे reject करे, और log pattern ठीक दो log lines highlight करे। अलग लेकिन बराबर pattern ठीक है — \d{2} और [0-9]{2} एक ही हैं — जब तक वह जहाँ validate करता है वहाँ anchored हो, हर लिटरल मेटाकैरेक्टर को एस्केप करे और alternation को ग्रुप के अंदर रखे। इनमें से कोई pattern गाइड के (a+)+ की तरह ऐसे ग्रुप पर दोहराने वाला quantifier नहीं लगाता जिसके अंदर पहले से quantifier हो: quantifier वाला अकेला ग्रुप, (?:/\S*)?, optional है और ज़्यादा से ज़्यादा एक बार चलता है, इसलिए catastrophic backtracking का ख़तरा कम है; पक्का करने के लिए एक लंबा input paste करें। फिर status-line pattern को Regex एक्सप्लेनर में डालें और token-by-token पढ़ें: जो गलती आपको नहीं दिखती उसे ढूँढने का यह एक तेज़ तरीका है।

इस topic में आपकी प्रगति

QA रोडमैप का हिस्सा

इस गाइड में बताए गए टूल्स

रेगुलर एक्सप्रेशन को लाइव टेस्ट करें — मैच हाइलाइटिंग, कैप्चर ग्रुप और रिप्लेस प्रीव्यू के साथ।

यूटिलिटीज़

किसी भी रेगुलर एक्सप्रेशन की टोकन-दर-टोकन, आसान भाषा में व्याख्या पाएँ।

यूटिलिटीज़

टेस्ट किए हुए पैटर्न की लाइब्रेरी (ईमेल, URL, IP, तारीख़ें, IBAN, सऊदी/जॉर्डन फ़ोन नंबर…) और कस्टम नियमों से रेगुलर एक्सप्रेशन बनाएँ।

यूटिलिटीज़

दो टेक्स्ट की लाइन-दर-लाइन या शब्द-दर-शब्द तुलना करें और अंतर हाइलाइट करें।

फ़ॉर्मेटिंग

JSON पर JSONPath एक्सप्रेशन ($.store.book[*].author) चलाएँ और मैच लाइव देखें।

JSON और डेटा

और गाइड

और गाइड
JSON और डेटा

JSON क्या है?

JSON आसान भाषा में: यह क्या है, छह वैल्यू टाइप, वे सिंटैक्स नियम जिनमें लोग अटकते हैं, इसे फ़ॉर्मेट और वैलिडेट कैसे करें, और XML व YAML से इसकी तुलना।

5 मिनट पढ़ने का समय
सुरक्षा

JWT क्या है? JSON Web Token समझें

JWT आसान भाषा में: JSON Web Token के तीन हिस्से, exp और sub जैसे क्लेम, डिकोड और वेरिफ़ाई कैसे करें, डिकोड करना वेरिफ़ाई क्यों नहीं, और सिक्योरिटी।

5 मिनट पढ़ने का समय
एन्कोडिंग

Base64 क्या है? एन्कोडिंग समझें

Base64 समझें: यह क्या है और क्या नहीं, एन्कोडिंग कैसे काम करती है, आउटपुट एक-तिहाई क्यों बढ़ता है, Base64 बनाम Base64URL, = पैडिंग, और एन्कोड-डिकोड।

5 मिनट पढ़ने का समय
यूटिलिटीज़

UUID क्या है? v4 बनाम v7, UUID बनाम GUID और ULID

UUID समझें: 128-बिट फ़ॉर्मेट, v4 बनाम v7, डेटाबेस key के लिए v7 बेहतर क्यों, UUID बनाम GUID बनाम ULID, कॉलिज़न की संभावना, और जनरेट-वैलिडेट कैसे करें।

5 मिनट पढ़ने का समय
वेब

HTTP स्टेटस कोड समझें

HTTP स्टेटस कोड की हर क्लास उन कोड के साथ जो असल में मिलते हैं — 200, 301, 400, 401, 403, 404, 422, 429, 500, 502, 503, 504 — वजह और कौन-सा लौटाएँ।

5 मिनट पढ़ने का समय
यूटिलिटीज़

Cron एक्सप्रेशन समझें

Cron एक्सप्रेशन फ़ील्ड-दर-फ़ील्ड: मिनट, घंटा, दिन, महीना, वीकडे, *, /, - और , ऑपरेटर, आम शेड्यूल, टाइम ज़ोन और क्लासिक गलतियाँ।

6 मिनट पढ़ने का समय