JS RegExp ग्रुप्स
In this page:
(pattern) // capturing group
(?:pattern) // non-capturing
(?<name>pattern) // named group
Basic Capturing Groups
किसी pattern के हिस्से को parentheses में लपेटना, जैसे (\d{3})-(\d{4}), हर parenthesized हिस्से को अलग-अलग capture करता है -- किसी matching string पर .match() कॉल करना एक array return करता है जहाँ index 0 पूरा match होता है, और हर अगला index क्रम में एक captured group को दिखाता है।
उदाहरण: Basic Capturing Groups
const match = "555-1234".match(/(\d{3})-(\d{4})/);
console.log(match[0], match[1], match[2]);
Non-Capturing Groups: (?:...)
एक non-capturing group, जिसे (?:pattern) लिखा जाता है, किसी pattern के हिस्से को group करता है (किसी quantifier को लागू करने के लिए, या alternation को organize करने के लिए) बिना captured results की array में कोई entry जोड़े -- यह तब उपयोगी है जब आपको grouping सिर्फ structure के लिए चाहिए, उस टुकड़े को अलग से निकालने के लिए नहीं।
उदाहरण: Non-Capturing Groups: (?:...)
const match = "abcabc".match(/(?:abc)+/);
console.log(match[0]); // grouped for the +, but not captured separately
Named Capturing Groups: (?<name>...)
किसी captured group को उसकी numeric position से reference करने के बजाय, (?<name>pattern) उसे एक readable नाम देता है, जो बाद में match.groups.name से access होता है -- यह कई captured टुकड़ों के साथ काम करने वाले code को numbered positions पर निर्भर रहने से काफी ज़्यादा साफ बनाता है।
उदाहरण: Named Capturing Groups: (?<name>...)
const match = "2024-06-15".match(/(?<year>\d{4})-(?<month>\d{2})/);
console.log(match.groups.year, match.groups.month);
Backreferences: एक Captured Group को दोबारा इस्तेमाल करना
एक backreference, जिसे \1 (या named group के लिए \k<name>) लिखा जाता है, उसी pattern के किसी पिछले group ने असल में जो मैच किया उसे वापस reference करता है -- यह repeated content ढूंढने के लिए उपयोगी है, जैसे लगातार दो बार आने वाला कोई शब्द, बिना यह hardcode किए कि वह repeated content असल में क्या है।
उदाहरण: Backreferences: Reusing a Captured Group
console.log(/(\w+) \1/.test("hello hello")); // true, same word repeated
एक Practical Example: एक पूरा नाम Parse करना
named capturing groups को एक realistic pattern के साथ मिलाना -- किसी पूरे नाम की string से एक first और last name निकालना, या किसी URL को उसके component हिस्सों में तोड़ना -- दिखाता है कि groups कैसे एक single matched pattern को कई individually usable extracted data के टुकड़ों में बदल देते हैं।
उदाहरण: A Practical Example: Parsing a Full Name
const match = "Sam Sharma".match(/(?<first>\w+) (?<last>\w+)/);
console.log(match.groups.first, match.groups.last);
- यह भूल जाना कि match() के result array में full match index 0 पर होता है, captured groups index 1 से शुरू होते हैं, 0 से नहीं।
- किसी capturing group का इस्तेमाल करना जब एक non-capturing group (?:...) ज़्यादा उपयुक्त होता, match result को unwanted extra captured pieces से भर देते हुए।
- किसी pattern में कई groups होने पर backreference numbering को मिला देना, गलत group number को refer करते हुए।
- (pattern) एक capturing group बनाता है, match के उस हिस्से को अलग से extract करते हुए।
- (?:pattern) एक non-capturing group बनाता है, जो captured results में एक entry जोड़े बिना grouping के लिए उपयोगी है।
- (?<name>pattern) एक named capturing group बनाता है, जो साफ code के लिए numeric position के बजाय नाम से accessible है।
Capturing groups को JavaScript regex के सबसे शुरुआती implementation से support मिला है; named capturing groups सभी current major browsers में supported हैं।
Chapter Quiz — Complete all 26 topics to unlock
0/26 topics done
Complete these topics first:
- JS JSON
- JS Regular Expressions
- JS Fetch API
- JS LocalStorage and SessionStorage
- JS Cookies
- JS setTimeout and setInterval
- JS Event Loop
- JS Web Workers
- JS Service Workers
- JS AJAX
- JS AJAX Intro
- JS AJAX XMLHttp
- JS AJAX Request
- JS AJAX Response
- JS AJAX XML
- JS AJAX PHP
- JS AJAX Database
- JS JSONP
- JS RegExp Flags
- JS RegExp Classes
- JS RegExp Metachars
- JS RegExp Assertions
- JS RegExp Groups
- JS RegExp Quantifiers
- JS JSON HTML
- JS JSON vs XML