जावास्क्रिप्ट रेगुलर एक्सप्रेशन्स में विशेष वर्णों को एस्केप करना

मान लीजिए कि हम चाहते हैं कि विशेष वर्ण स्वयं को दर्शाए। इसके लिए इसे बैकस्लैश का उपयोग करके एस्केप करना होगा। आइए उदाहरणों से समझते हैं।

उदाहरण

निम्नलिखित उदाहरण में, रेगुलर एक्सप्रेशन के लेखक चाहते थे, कि खोज पैटर्न इस तरह दिखे: अक्षर 'a', फिर प्लस '+', फिर अक्षर 'x'। हालाँकि, कोड के लेखक ने '+' वर्ण को एस्केप नहीं किया और इसलिए खोज पैटर्न वास्तव में इस तरह दिखता है: अक्षर 'a' एक या अधिक बार, फिर अक्षर 'x':

javascriptlet str = 'a+x ax aax aaax';
let res = str.replace(/a+x/g, '!');

परिणामस्वरूप वेरिएबल में निम्नलिखित लिखा जाएगा:

javascript'a+x ! ! !'

उदाहरण

और अब लेखक ने प्लस को बैकस्लैश से एस्केप कर दिया है। अब खोज पैटर्न वैसा ही दिखता है, जैसा होना चाहिए: अक्षर 'a', फिर प्लस '+', फिर अक्षर 'x'।

javascriptlet str = 'a+x ax aax aaax';
let res = str.replace(/a\+x/g, '!');

परिणामस्वरूप वेरिएबल में निम्नलिखित लिखा जाएगा:

javascript'! ax aax aaax'

उदाहरण

इस उदाहरण में पैटर्न इस तरह दिखता है: अक्षर 'a', फिर डॉट '.', फिर अक्षर 'x':

javascriptlet str = 'a.x abx azx';
let res = str.replace(/a\.x/g, '!');

परिणामस्वरूप वेरिएबल में निम्नलिखित लिखा जाएगा:

javascript'! abx azx'

उदाहरण

और अगले उदाहरण में लेखक स्लैश को एस्केप करना भूल गया और रेगुलर एक्सप्रेशन ने सभी सबस्ट्रिंग्स को पकड़ लिया, क्योंकि अनएस्केप्ड डॉट किसी भी वर्ण को दर्शाता है:

javascriptlet str = 'a.x abx azx';
let res = str.replace(/a.x/g, '!');

परिणामस्वरूप वेरिएबल में निम्नलिखित लिखा जाएगा:

javascript'! ! !'

टिप्पणी

ध्यान दें कि यदि आप डॉट के लिए बैकस्लैश भूल जाते हैं (जब उसे स्वयं को दर्शाना चाहिए) - इस पर ध्यान नहीं जा सकता:

javascript'a.x'.replace(/a.x/g, '!'); // '!' लौटाएगा, जैसा कि हम चाहते थे

दृष्टिगत रूप से यह सही ढंग से काम करता है (क्योंकि डॉट किसी भी वर्ण को दर्शाता है, जिसमें सामान्य डॉट '.' भी शामिल है)। लेकिन यदि वह स्ट्रिंग बदल दें, जिसमें प्रतिस्थापन हो रहा है - तो हम अपनी गलती देखेंगे:

javascript'a.x abx azx'.replace(/a.x/g, '!'); // '! ! !' लौटाएगा, जबकि अपेक्षा थी '! abx azx'

विशेष वर्णों और सामान्य वर्णों की सूची

यदि सामान्य वर्ण को एस्केप कर दें - तो कुछ बुरा नहीं होगा - वह फिर भी स्वयं को ही दर्शाएगा। अपवाद - अंक, उन्हें एस्केप नहीं किया जा सकता।

अक्सर संदेह होता है कि क्या यह वर्ण विशेष है। कुछ लोग तो सभी संदिग्ध वर्णों को एक के बाद एक एस्केप करने तक पहुँच जाते हैं। हालाँकि, यह एक बुरी प्रथा है (रेगुलर एक्सप्रेशन को बैकस्लैश से अव्यवस्थित कर देती है)।

विशेष वर्ण हैं: $ ^ . * + ? \ / {} [] () |

विशेष वर्ण नहीं हैं: @ : , ' " ; - _ = < > % # ~ `& !

व्यावहारिक समस्याएं

Задание 1

एक स्ट्रिंग दी गई है:

javascriptlet str = 'a.a aba aea';

एक रेगुलर एक्सप्रेशन लिखें, जो स्ट्रिंग 'a.a' को ढूंढे, बाकियों को नहीं पकड़े।

Задание 2

एक स्ट्रिंग दी गई है:

javascriptlet str = '2+3 223 2223';

एक रेगुलर एक्सप्रेशन लिखें, जो स्ट्रिंग '2+3' को ढूंढे, बाकियों को नहीं पकड़े।

Задание 3

एक स्ट्रिंग दी गई है:

javascriptlet str = '23 2+3 2++3 2+++3 345 567';

एक रेगुलर एक्सप्रेशन लिखें, जो स्ट्रिंग्स '2+3', '2++3', '2+++3', को ढूंढे, बाकियों को नहीं पकड़े (+ कितनी भी संख्या में हो सकता है)।

Задание 4

एक स्ट्रिंग दी गई है:

javascriptlet str = '23 2+3 2++3 2+++3 445 677';

एक रेगुलर एक्सप्रेशन लिखें, जो स्ट्रिंग्स '23', '2+3', '2++3', '2+++3', को ढूंढे, बाकियों को नहीं पकड़े।

Задание 5

एक स्ट्रिंग दी गई है:

javascriptlet str = '*+ *q+ *qq+ *qqq+ *qqq qqq+';

एक रेगुलर एक्सप्रेशन लिखें, जो स्ट्रिंग्स '*q+', '*qq+', '*qqq+', को ढूंढे, बाकियों को नहीं पकड़े।

Задание 6

एक स्ट्रिंग दी गई है:

javascriptlet str = '[abc] {abc} abc (abc) [abc]';

एक रेगुलर एक्सप्रेशन लिखें, जो वर्गाकार कोष्ठकों वाली स्ट्रिंग्स को ढूंढे और उन्हें '!' से बदल दे।