जावास्क्रिप्ट रेगुलर एक्सप्रेशन्स में पॉजिटिव और नेगेटिव लुकअहेड
कभी-कभी इस प्रकार की समस्या को हल करने की आवश्यकता होती है: स्ट्रिंग 'aaa' को ढूंढें
और इसे '!' से बदलें,
लेकिन केवल तभी जब 'aaa' के बाद
'x' हो, और 'x' को स्वयं
नहीं बदलना है। यदि हम समस्या को हल करने का प्रयास करते हैं
'सीधे तरीके से', तो हम सफल नहीं होंगे:
javascript'aaax baaa'.replace(/aaax/g, '!'); // '! baaa' लौटाएगा, जबकि हम '!x baaa' चाहते थे
लुकअहेड
समस्या को हल करने के लिए एक तरीका यह कहने की आवश्यकता है कि
'x' को प्रतिस्थापित नहीं किया जाना चाहिए। यह
विशेष ब्रैकेट (?= ) का उपयोग करके किया जाता है,
जो केवल देखते हैं, लेकिन अपने साथ नहीं ले जाते।
इन ब्रैकेट को पॉजिटिव लुकअहेड कहा जाता है।
पॉजिटिव - क्योंकि 'x'
(हमारे मामले में) होना चाहिए - केवल तभी
प्रतिस्थापन होगा।
आइए हमारी समस्या को हल करने के लिए इन ब्रैकेटों को लागू करें:
javascript'aaax aaab'.replace(/aaa(?=x)/g, '!'); // '!x aaab' लौटाएगा
नेगेटिव लुकअहेड भी होता है
- (?! ) - यह, इसके विपरीत, कहता है कि
कुछ नहीं होना चाहिए। निम्नलिखित उदाहरण में,
प्रतिस्थापन तभी होगा, जब 'aaa' के बाद
'x' नहीं हो:
javascript'aaax aaab'.replace(/aaa(?!x)/g, '!'); // 'aaax !b' लौटाएगा
लुकबिहाइंड
इसी तरह पॉजिटिव लुकबिहाइंड होता है
- (?<= )। निम्नलिखित
उदाहरण में प्रतिस्थापन तभी होगा, जब
'aaa' से पहले 'x' हो:
javascript'xaaa'.replace(/(?<=x)aaa/g, '!'); // 'x!' लौटाएगा
और नेगेटिव लुकबिहाइंड भी होता है
- (?<! )। निम्नलिखित उदाहरण में प्रतिस्थापन
तभी होगा, जब 'aaa' से पहले
'x' नहीं हो:
javascript'baaa'.replace(/(?<!x)aaa/g, '!'); // 'b!' लौटाएगा
व्यावहारिक समस्याएं
एक स्ट्रिंग दी गई है, जिसमें फ़ंक्शन नाम हैं:
javascriptlet str = 'func1() func2() func3()';
स्ट्रिंग से फ़ंक्शन नामों की एक सरणी प्राप्त करें।
एक टैग के साथ एक स्ट्रिंग दी गई है:
javascriptlet str = '<a href="" class="eee" id="zzz">';
इस टैग की विशेषताओं के नामों की एक सरणी प्राप्त करें।
चर के साथ एक स्ट्रिंग दी गई है:
javascriptlet str = '$aaa $bbb $ccc xxxx';
उन उप-स्ट्रिंग्स को प्राप्त करें, जिनके सामने डॉलर का चिह्न हो।