JS RegExp एसर्शन्स
In this page:
x(?=y) // lookahead
x(?!y) // negative lookahead
(?<=y)x // lookbehind
(?<!y)x // negative lookbehind
Positive Lookahead: (?=...)
एक positive lookahead, जिसे (?=pattern) लिखा जाता है, मांग करता है कि main match के ठीक बाद दिया गया pattern हो, पर उस बाद वाले text को असली match result का हिस्सा नहीं बनाता -- यह किसी शब्द को सिर्फ तभी मैच करने के लिए उपयोगी है जब उसके ठीक बाद कोई खास शब्द आए।
उदाहरण: Positive Lookahead: (?=...)
console.log("100px".match(/\d+(?=px)/)); // matches digits only when followed by "px"
Negative Lookahead: (?!...)
एक negative lookahead, (?!pattern), मांग करता है कि main match के बाद दिया गया pattern न हो -- एक positive lookahead का उल्टा, यह किसी खास बाद वाले context को एक वरना valid match से exclude करने के लिए उपयोगी है।
उदाहरण: Negative Lookahead: (?!...)
console.log("100em".match(/\d+(?!px)/)); // matches since NOT followed by "px"
Positive और Negative Lookbehind: (?<=...) और (?<!...)
Lookbehind lookahead जैसा ही काम करता है पर बाद के बजाय match से ठीक पहले के text को जांचता है -- (?<=pattern) मांग करता है कि वह पहले वाला text मौजूद हो, और (?<!pattern) मांग करता है कि वह न हो, फिर भी असली match result में वह पहले वाला text शामिल किए बिना।
उदाहरण: Positive and Negative Lookbehind: (?<=...) and (?<!...)
console.log("$100".match(/(?<=\$)\d+/)); // "100", lookbehind for $
console.log("100".match(/(?<!\$)\d+/)); // "100", not preceded by $
Assertions को Main Pattern के साथ Combine करना
Assertions आमतौर पर pattern के एक असली, capturing हिस्से के साथ मिलाए जाते हैं -- assertion context तय करता है, जबकि आसपास का pattern यह define करता है कि असल में क्या मैच और return होता है, साथ मिलकर एक सटीक condition बनाते हुए जो अकेले साधारण character matching से आगे है।
उदाहरण: Combining Assertions with the Main Pattern
console.log(/(?=.*\d).{6,}/.test("secret1")); // lookahead checks context, {6,} defines the real match
Assertions कब सही Tool हैं
Assertions खासतौर पर तब चमकते हैं जब आपको आसपास के context के आधार पर मैच करना हो बिना उस context को capture किए -- किसी currency symbol के बाद एक price निकालना, यह validate करना कि किसी password में कई अलग-अलग character types हों, या किसी शब्द को सिर्फ तभी ढूंढना जब वह किसी बड़े compound word का हिस्सा न हो।
उदाहरण: When Assertions Are the Right Tool
console.log("Price: $50".match(/(?<=\$)\d+/)); // extracts price after currency symbol without capturing the symbol itself
- किसी lookahead/lookbehind को एक normal group से confuse करना -- वे जिस text को check करते हैं वह actual match result में शामिल नहीं होता, जो उसे captured होने की उम्मीद करने वाले लोगों को हैरान करता है।
- positive assertions (?=...) और (?<=...) (मौजूद होना चाहिए) को negative वाले (?!...) और (?<!...) (मौजूद नहीं होना चाहिए) से मिला देना।
- बिना check किए यह मान लेना कि lookbehind support universal है -- इसे JavaScript में lookahead से बाद में जोड़ा गया और इसकी browser support history थोड़ी अलग है।
- (?=...) एक positive lookahead है: match के बाद दिया गया pattern होना चाहिए, बिना उसे result में शामिल किए।
- (?!...) एक negative lookahead है: match के बाद दिया गया pattern नहीं होना चाहिए।
- (?<=...) और (?<!...) positive और negative lookbehind हैं, यह check करते हैं कि match के बाद के बजाय पहले क्या है।
Lookahead को बहुत लंबे समय से हर browser में support मिला है; lookbehind सभी 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