tomai
लॉग इन

Regex हैंडबुक: पैटर्न जिन्हें आप सच में बार-बार इस्तेमाल करेंगे

Regular expressions पूरी एक खोज-भाषा को एक ही पंक्ति में समेट लेते हैं, इसलिए उनके हिस्से समझ आने तक वे रहस्यमय लगते हैं। यह हैंडबुक syntax के उस 20 प्रतिशत को कवर करती है जो 80 प्रतिशत काम निपटा देता है: pasted text में email खोजना, input validate करना, logs बाँटना और filenames को bulk में दोबारा लिखना।

1. Literals, dots और character classes

अधिकतर characters खुद से match होते हैं; dot newline को छोड़कर किसी भी character से match होता है। Square brackets एक set तय करते हैं — [0-9] कोई भी digit लेता है, [^0-9] digit के अलावा सब कुछ लेता है — जबकि \d, \w और \s जैसे shorthands digits, word characters और whitespace कवर करते हैं। जहाँ आप जानते हैं कि वहाँ क्या होना चाहिए, वहाँ नंगे dot के बजाय स्पष्ट class को तरजीह दें।

2. Anchors और quantifiers

^ शुरुआत से जोड़ता है और $ अंत से, इसलिए ^hi केवल उन्हीं strings से match होता है जो hi से शुरू होती हैं। एक-या-अधिक के लिए +, शून्य-या-अधिक के लिए * और वैकल्पिक के लिए ? जोड़ें; इनमें से किसी के बाद लगने वाला ? lazy matching चालू कर देता है, जो आखिरी के बजाय पहले मौके पर रुकता है। Greedy बनाम lazy अप्रत्याशित matches का सबसे आम स्रोत है।

3. Groups, alternation और lookarounds

Parentheses group बनाते और capture करते हैं — (cat|dog)s? cat, cats, dog या dogs से match होता है — जबकि (?:…) बिना capture किए group बनाता है। \d+(?=px) जैसे lookaheads आगे क्या है यह बिना consume किए जाँचते हैं, इसलिए आप suffix की माँग कर सकते हैं और उसे अगले match के लिए वहीं छोड़ सकते हैं। Named groups अगले पढ़ने वाले के लिए इरादा दर्ज कर देते हैं।

4. Flags सब कुछ बदल देते हैं

Closing slash के बाद के अक्षर engine को tune करते हैं: g पहले के बजाय सारे matches खोजता है, i case अनदेखा करता है, m anchors को हर line पर काम कराता है, s dot को newlines पार करने देता है, u पूर्ण Unicode चालू करता है और y matching को एक position से बाँध देता है। गलत flag set अक्सर वजह होता है कि सही दिखने वाला pattern कुछ नहीं लौटाता।

5. Backtracking का जाल

लंबी non-matching string पर (a+)+ जैसे nested quantifiers engine को exponential संख्या में रास्तों पर भेजकर tab फ्रीज़ कर सकते हैं। Repetitions को flat रखें, जहाँ supported हो वहाँ possessive-style rewrites या atomic groups को तरजीह दें, और संदिग्ध patterns को ship करने से पहले hostile input पर परखें — उन्हें हमारे regex tester में paste करें, जो हर match और group को आपके browser में live highlight करता है।