जावास्क्रिप्ट में नियमित अभिव्यक्ति. अभिव्यंजक जावास्क्रिप्ट: नियमित अभिव्यक्तियाँ जावास्क्रिप्ट में नियमित अभिव्यक्तियों के साथ कार्य करना

💖क्या आपको यह पसंद है?लिंक को अपने दोस्तों के साथ साझा करें

नियमित अभिव्यक्तिआपको टेक्स्ट में शब्दों और अभिव्यक्तियों को हटाने, निकालने या बदलने के लिए लचीली खोज करने की अनुमति देता है।

वाक्य - विन्यास:

//रेगुलर एक्सप्रेशन बनाने का पहला विकल्प var regexp=new RegExp( नमूना,संशोधक); //रेगुलर एक्सप्रेशन var regexp=/ बनाने का दूसरा विकल्प नमूना/संशोधक;

नमूनाआपको खोज के लिए एक वर्ण पैटर्न निर्दिष्ट करने की अनुमति देता है।

संशोधकआपको खोज व्यवहार को अनुकूलित करने की अनुमति देता है:

  • मैं- पत्रों के मामले को ध्यान में रखे बिना खोजें;
  • जी- वैश्विक खोज (दस्तावेज़ में सभी मिलान मिलेंगे, केवल पहला नहीं);
  • एम- बहु-पंक्ति खोज।

शब्द और भाव खोजें

नियमित अभिव्यक्ति का सबसे सरल उपयोग विभिन्न पाठों में शब्दों और अभिव्यक्तियों की खोज करना है।

संशोधक का उपयोग करके खोज का उपयोग करने का एक उदाहरण यहां दिया गया है:

//आइए सेट करें नियमित अभिव्यक्ति rv1 rv1=/रूस/; //नियमित अभिव्यक्ति rv2 rv2=/Russia/g निर्दिष्ट करें; //नियमित अभिव्यक्ति rv3 rv3=/Russia/ig निर्दिष्ट करें; //बोल्ड इंगित करता है कि //अभिव्यक्ति rv1 का उपयोग करते समय पाठ में मिलान कहाँ मिलेंगे: रूस दुनिया का सबसे बड़ा राज्य है। रूस की सीमा 18 देशों से लगती है। रूस यूएसएसआर का उत्तराधिकारी राज्य है। //बोल्ड इंगित करता है कि //अभिव्यक्ति rv2 का उपयोग करते समय पाठ में मिलान कहाँ मिलेंगे: रूस दुनिया का सबसे बड़ा राज्य है। रूस की सीमा 18 देशों से लगती है। रूस यूएसएसआर का उत्तराधिकारी राज्य है। यूएसएसआर का उत्तराधिकारी राज्य।";

विशेष प्रतीक

नियमित वर्णों के अतिरिक्त, नियमित अभिव्यक्ति पैटर्न का उपयोग किया जा सकता है विशेष प्रतीक(मेटाकैरेक्टर्स)। विवरण के साथ विशेष वर्ण नीचे दी गई तालिका में दिखाए गए हैं:

विशेष वर्ण विवरण
. पंक्ति के अंत वर्ण को छोड़कर किसी भी वर्ण से मेल खाता है।
\w किसी भी वर्णमाला वर्ण से मेल खाता है।
\W किसी भी गैर-वर्णमाला वर्ण से मेल खाता है।
\डी उन वर्णों से मेल खाता है जो संख्याएँ हैं।
\डी उन वर्णों से मेल खाता है जो संख्याएँ नहीं हैं।
\एस रिक्त स्थान वर्णों से मेल खाता है.
\एस गैर-व्हाट्सएप वर्णों से मेल खाता है.
\बी मिलान केवल शब्द सीमाओं (आरंभ या अंत) पर ही मिलेंगे।
\बी मिलान केवल गैर-शब्द सीमाओं पर ही खोजा जाएगा।
\एन न्यूलाइन वर्ण से मेल खाता है.

/* reg1 अभिव्यक्ति में दो मनमाने अक्षरों से शुरू होने वाले और "पशु चिकित्सक" पर समाप्त होने वाले सभी शब्द मिलेंगे। चूँकि वाक्य में शब्दों को एक स्थान से अलग किया गया है, हम शुरुआत में और अंत में एक विशेष वर्ण \s जोड़ेंगे */ reg1=/\s..vet\s/g; txt='हैलो वाचा कॉरडरॉय कोठरी'; दस्तावेज़.लिखें(txt.match(reg1) + "
"); /* reg2 अभिव्यक्ति में तीन मनमाने अक्षरों से शुरू होने वाले और "vet" पर समाप्त होने वाले सभी शब्द मिलेंगे */ reg2=/\s...vet\s/g; document.write(txt.match(reg2) + "
''); लिखें(txt1.match(reg3) + "
"); // एक्सप्रेशन reg4 टेक्स्ट में सभी नंबर ढूंढेगा var reg4=/\d/g; txt2=''5 साल की पढ़ाई, 3 साल की नौकायन, 9 साल की शूटिंग।'' document.write(txt2. मैच (reg4) + "
");

त्वरित देखें

वर्गाकार कोष्ठकों में प्रतीक

वर्गाकार कोष्ठक का उपयोग करना [कीयू]आप खोजने के लिए वर्णों का एक समूह निर्दिष्ट कर सकते हैं।

वर्गाकार कोष्ठकों में वर्णों के समूह से पहले ^ वर्ण [^kwg]इंगित करता है कि आपको निर्दिष्ट वर्णों को छोड़कर वर्णमाला के सभी वर्णों को खोजने की आवश्यकता है।

वर्गाकार कोष्ठकों में वर्णों के बीच डैश (-) का उपयोग करना [ए-जेड]आप खोजने के लिए वर्णों की एक श्रृंखला निर्दिष्ट कर सकते हैं।

आप वर्गाकार कोष्ठक का उपयोग करके भी संख्याएँ खोज सकते हैं।

//नियमित अभिव्यक्ति reg1 reg1=/\sko[tdm]\s/g; सेट करें; // एक टेक्स्ट स्ट्रिंग सेट करें txt1 txt1='कैट ब्रैड कोड चेस्ट ऑफ ड्रॉअर्स कॉम कारपेट'; // रेगुलर एक्सप्रेशन reg1 का उपयोग करके, स्ट्रिंग txt1 document.write(txt1.match(reg1) + " खोजें
"); reg2=/\sslo[^tg]/g; txt2=" स्लॉट हाथी शब्दांश "; document.write(txt2.match(reg2) + "
"); reg3=//g; txt3='5 साल की पढ़ाई, 3 साल की तैराकी, 9 साल की शूटिंग"; document.write(txt3.match(reg3));

त्वरित देखें

परिमाणकों

परिमाणक- यह एक ऐसा निर्माण है जो आपको यह निर्दिष्ट करने की अनुमति देता है कि पूर्ववर्ती वर्ण या वर्णों का समूह एक मैच में कितनी बार दिखना चाहिए।

वाक्य - विन्यास:

// पूर्ववर्ती वर्ण x - बार आना चाहिए (एक्स)// पूर्ववर्ती वर्ण x से y बार सम्मिलित होना चाहिए (एक्स,वाई)// पिछला अक्षर कम से कम x बार आना चाहिए (एक्स,)//निर्दिष्ट करता है कि पूर्ववर्ती वर्ण 0 या अधिक बार आना चाहिए * //निर्दिष्ट करता है कि पूर्ववर्ती वर्ण 1 या अधिक बार आना चाहिए + //निर्दिष्ट करता है कि पूर्ववर्ती वर्ण 0 या 1 बार आना चाहिए ?


//नियमित अभिव्यक्ति rv1 rv1=/ko(5)shka/g निर्दिष्ट करें //नियमित अभिव्यक्ति rv2 rv2=/ko(3,)shka/g निर्दिष्ट करें //नियमित अभिव्यक्ति rv3 rv3=/ko+shka/g निर्दिष्ट करें //रेग्युलर एक्सप्रेशन rv4 rv4=/ko?shka/g निर्दिष्ट करें //रेग्युलर एक्सप्रेशन rv5 rv5=/ko*shka/g सेट करें //बोल्ड फॉन्ट दिखाता है कि //एक्सप्रेशन rv1 का उपयोग करते समय टेक्स्ट में मैच कहां मिलेंगे: kshka cat koushka koooshka koooshka koooshka // बोल्ड इंगित करता है कि //rv2 एक्सप्रेशन का उपयोग करते समय टेक्स्ट में मैच कहां मिलेंगे: kshka cat koushka कूओष्का कूओष्का कूओओष्का कूओओष्का कूओओष्का//बोल्ड इंगित करता है कि //अभिव्यक्ति rv3: kshka का उपयोग करते समय पाठ में मिलान कहां मिलेगा बिल्ली कूश्का कूओश्का कूओश्का कूओश्का कूओश्का//बोल्ड इंगित करता है कि //rv4 एक्सप्रेशन का उपयोग करते समय टेक्स्ट में मिलान कहां मिलेंगे: kshka cat koushka koooshka koooshka koooooshka koooooshka koooooshka //बोल्ड इंगित करता है कि //rv5 एक्सप्रेशन का उपयोग करते समय टेक्स्ट में मैच कहां मिलेंगे: क्ष्का बिल्ली कूष्का कूओष्का कूओष्का कूओष्का कूओष्का कूओष्का

टिप्पणी:यदि आप किसी विशेष वर्ण (जैसे . * + ? या ()) को नियमित वर्ण की तरह उपयोग करना चाहते हैं, तो आपको उसके सामने \ लगाना होगा।

कोष्ठक का उपयोग करना

नियमित अभिव्यक्ति पैटर्न के भाग को कोष्ठकों में संलग्न करके, आप अभिव्यक्ति को पैटर्न के उस भाग द्वारा पाए गए मिलान को याद रखने के लिए कहते हैं। सहेजे गए मिलान का उपयोग बाद में आपके कोड में किया जा सकता है।

उदाहरण के लिए, रेगुलर एक्सप्रेशन /(दिमित्री)\sVasiliev/ स्ट्रिंग "दिमित्री वासिलिव" ढूंढेगा और सबस्ट्रिंग "दिमित्री" को याद रखेगा।

नीचे दिए गए उदाहरण में, हम टेक्स्ट में शब्दों के क्रम को बदलने के लिए रिप्लेस() विधि का उपयोग करते हैं। हम संग्रहित मिलानों तक पहुँचने के लिए $1 और $2 का उपयोग करते हैं।

वार रेगएक्सपी = /(दिमित्री)\s(वासिलिव)/; var text = "दिमित्री वासिलिव"; var newtext = text.replace(regexp, "$2 $1"); दस्तावेज़.लिखें(नयापाठ);

त्वरित देखें

कोष्ठक का उपयोग क्वांटिफायर से पहले वर्णों को समूहित करने के लिए किया जा सकता है।

यह आलेख जावास्क्रिप्ट में नियमित अभिव्यक्ति का उपयोग करने की मूल बातें शामिल करता है।

परिचय

रेगुलर एक्सप्रेशन क्या है?

जेएस रेगुलर एक्सप्रेशन वर्णों का एक अनुक्रम है जो एक खोज नियम बनाता है। इस नियम का उपयोग पाठ को खोजने के साथ-साथ उसे बदलने के लिए भी किया जा सकता है। व्यवहार में, एक नियमित अभिव्यक्ति में एक वर्ण भी शामिल हो सकता है, लेकिन अधिक जटिल खोज पैटर्न अधिक सामान्य हैं।

जावास्क्रिप्ट में, रेगुलर एक्सप्रेशन भी ऑब्जेक्ट हैं। ये स्ट्रिंग में वर्णों के अनुक्रम से मिलान करने के लिए उपयोग किए जाने वाले पैटर्न हैं। इनका उपयोग RegExp ऑब्जेक्ट के exec() और test() तरीकों में और स्ट्रिंग ऑब्जेक्ट के मैच(), रिप्लेस(), सर्च और स्प्लिट() तरीकों में किया जाता है।

उदाहरण

var पैटर्न = /उदाहरण/i

/example/i एक रेगुलर एक्सप्रेशन है. उदाहरण एक टेम्पलेट है ( जिसका उपयोग खोज में किया जाएगा). मैं केस संवेदनशीलता को इंगित करने वाला एक संशोधक है।

रेगुलर एक्सप्रेशन तैयार करना

जेएस रेगुलर एक्सप्रेशन में एक पैटर्न और एक संशोधक शामिल होता है। सिंटैक्स कुछ इस प्रकार होगा:

/पैटर्न/संशोधक;

टेम्प्लेट खोज नियम निर्दिष्ट करता है. इसमें /abc/ जैसे सरल वर्ण या सरल और विशेष वर्णों का संयोजन शामिल है: /abc/ या /Chapter (d+).d/ ।

टेम्पलेट तालिका

संशोधक आपको प्रश्नों को केस संवेदनशील, वैश्विक इत्यादि बनाने की अनुमति देते हैं। इनका उपयोग केस-संवेदी खोजों के साथ-साथ वैश्विक खोजों को संचालित करने के लिए किया जाता है।

संशोधक तालिका

अब हम JS रेगुलर एक्सप्रेशन लागू करने के लिए तैयार हैं। ऐसा करने के दो मुख्य तरीके हैं: रेगुलर एक्सप्रेशन ऑब्जेक्ट या स्ट्रिंग पर रेगुलर एक्सप्रेशन का उपयोग करना।

रेगुलर एक्सप्रेशन ऑब्जेक्ट का उपयोग करना

एक रेगुलर एक्सप्रेशन ऑब्जेक्ट बनाएं

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

विधि 1: नियमित अभिव्यक्ति शाब्दिक का उपयोग करना जिसमें स्लैश में संलग्न एक पैटर्न शामिल है, उदाहरण के लिए:

var reg = /ab+c/;

जब स्क्रिप्ट को पार्स किया जाता है तो नियमित अभिव्यक्ति अक्षर नियमित अभिव्यक्ति के पूर्व-संकलन को ट्रिगर करते हैं। यदि रेगुलर एक्सप्रेशन स्थिर है, तो प्रदर्शन को बेहतर बनाने के लिए इसका उपयोग करें।

विधि 2: उदाहरण के लिए, RegExp ऑब्जेक्ट के कंस्ट्रक्टर फ़ंक्शन को कॉल करना:

var reg = new RegExp("ab+c");

कंस्ट्रक्टर का उपयोग करने से स्क्रिप्ट चलने के दौरान जेएस रेगुलर एक्सप्रेशन को संकलित करने की अनुमति मिलती है। उपयोग यह विधि, यदि रेगुलर एक्सप्रेशन बदल जाएगा या आप पैटर्न को पहले से नहीं जानते हैं। उदाहरण के लिए, यदि आप किसी खोज क्वेरी में प्रवेश करने वाले उपयोगकर्ता से जानकारी प्राप्त करते हैं।

नियमित अभिव्यक्ति वस्तु विधियाँ

आइए कुछ सामान्य रेगुलर एक्सप्रेशन ऑब्जेक्ट विधियों पर एक नज़र डालें:

  • संकलन() ( संस्करण 1.5 में बहिष्कृत) - नियमित अभिव्यक्ति संकलित करता है;
  • exec() - एक स्ट्रिंग मिलान करता है। पहला मैच लौटाता है;
  • परीक्षण() - एक स्ट्रिंग पर एक मिलान करता है। सही या गलत लौटाता है;
  • toString() - रेगुलर एक्सप्रेशन का स्ट्रिंग मान लौटाता है।

उदाहरण

परीक्षण() का उपयोग करना

परीक्षण() विधि रेगएक्सपी ऑब्जेक्ट की नियमित अभिव्यक्ति है। यह एक पैटर्न स्ट्रिंग की खोज करता है और परिणाम के आधार पर सही या गलत लौटाता है। निम्नलिखित जेएस नियमित अभिव्यक्ति उदाहरण दिखाता है कि चरित्र के लिए एक स्ट्रिंग कैसे खोजी जाती है " ”:

वर पैट = /ई/; patt.test ("दुनिया में सबसे अच्छी चीजें मुफ़्त हैं!");

चूँकि यहाँ पंक्ति में है " ”, इस कोड का परिणाम सत्य होगा।

रेगुलर एक्सप्रेशन को वेरिएबल में रखने की आवश्यकता नहीं है। एक ही क्वेरी एक पंक्ति में की जा सकती है:

/e/.test('दुनिया में सबसे अच्छी चीजें मुफ़्त हैं!');

निष्पादन() का उपयोग करना

यह किसी दिए गए खोज नियम का उपयोग करके एक स्ट्रिंग खोजता है और पाया गया टेक्स्ट लौटाता है। यदि कोई मिलान नहीं मिला, तो परिणाम शून्य होगा।

आइए उसी प्रतीक के उदाहरण का उपयोग करके क्रिया में विधि को देखें " ”:

/e/.exec('दुनिया में सबसे अच्छी चीजें मुफ़्त हैं!');

चूँकि पंक्ति में शामिल है " ”, इस कोड का परिणाम .e होगा।

किसी स्ट्रिंग में रेगुलर एक्सप्रेशन लागू करना

जावास्क्रिप्ट में, इन अभिव्यक्तियों का उपयोग स्ट्रिंग ऑब्जेक्ट के दो तरीकों के साथ भी किया जा सकता है: खोज() और प्रतिस्थापित()। पाठ में खोज करने और प्रतिस्थापित करने के लिए इनकी आवश्यकता होती है।

  • खोज() विधि - किसी मिलान की खोज करने के लिए एक अभिव्यक्ति का उपयोग करती है, और मिलान के स्थान के बारे में जानकारी लौटाती है;
  • रिप्लेस() विधि बदले हुए पैटर्न के साथ एक संशोधित स्ट्रिंग लौटाती है।

उदाहरण

वाक्यांश के लिए केस-संवेदी खोज करने के लिए JS रेगुलर एक्सप्रेशन का उपयोग करना w3स्कूल" इन ​​- लाइन:

var str = "W3Schools पर जाएँ"; var n = str.search(/w3schools/i);

n में परिणाम 6 होगा.

खोज विधि एक स्ट्रिंग को तर्क के रूप में भी लेती है। स्ट्रिंग तर्क को नियमित अभिव्यक्ति में परिवर्तित किया जाएगा:

वाक्यांश को खोजने के लिए स्ट्रिंग का उपयोग करना W3स्कूल" इन ​​- लाइन।

जावास्क्रिप्ट में, रेगुलर एक्सप्रेशन को RegExp ऑब्जेक्ट द्वारा दर्शाया जाता है। रेगएक्सपी ऑब्जेक्ट्स को रेगएक्सपी() कंस्ट्रक्टर का उपयोग करके बनाया जा सकता है, लेकिन अधिकतर वे एक विशेष शाब्दिक वाक्यविन्यास का उपयोग करके बनाए जाते हैं। जिस प्रकार स्ट्रिंग अक्षर उद्धरण चिह्नों में संलग्न वर्णों के रूप में निर्दिष्ट होते हैं, उसी प्रकार नियमित अभिव्यक्ति अक्षर स्लैश जोड़ी / में संलग्न वर्णों के रूप में निर्दिष्ट होते हैं।

/पैटर्न/झंडे नया रेगएक्सप("पैटर्न"[, खोज विकल्प])

नमूना- खोज के लिए एक नियमित अभिव्यक्ति (बाद में प्रतिस्थापन पर अधिक), और झंडे - वर्ण जी (वैश्विक खोज), आई (मामला महत्वपूर्ण नहीं है) और एम (मल्टी-लाइन खोज) के किसी भी संयोजन की एक स्ट्रिंग। पहली विधि अक्सर प्रयोग की जाती है, दूसरी - कभी-कभी। उदाहरण के लिए, ऐसी दो कॉल समतुल्य हैं.

खोज विकल्प

रेगुलर एक्सप्रेशन बनाते समय, हम अतिरिक्त खोज विकल्प निर्दिष्ट कर सकते हैं

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

प्रतीकपत्र-व्यवहार
अक्षरांकीय वर्णखुद से मेल करें
\0 एनयूएल वर्ण (\u0000)
\टीटैब (\u0009)
\एनलाइन फ़ीड (\u000A)
\vलंबवत टैब (\u000B)
\एफपृष्ठ अनुवाद (\u000C)
\आरगाड़ी वापसी (\u000D)
\xnnलैटिन सेट से एक वर्ण, हेक्साडेसिमल संख्या एनएन द्वारा निर्दिष्ट; उदाहरण के लिए, \x0A \n के समान है
\uxxxहेक्साडेसिमल संख्या xxxx द्वारा निर्दिष्ट यूनिकोड वर्ण; उदाहरण के लिए, \u0009 \t के समान है
\cXनियंत्रण वर्ण "X", उदाहरण के लिए, अनुक्रम \cJ न्यूलाइन वर्ण \n के बराबर है
\ नियमित पात्रों के लिए - उन्हें विशेष बनाता है। उदाहरण के लिए, अभिव्यक्ति /s/ केवल वर्ण "s" की तलाश करती है। और यदि आप s से पहले \ डालते हैं, तो /\s/ पहले से ही एक स्पेस कैरेक्टर को दर्शाता है। और इसके विपरीत, यदि कैरेक्टर विशेष है, उदाहरण के लिए *, तो \ इसे सिर्फ एक नियमित "तारांकन" कैरेक्टर बना देगा। उदाहरण के लिए, /a*/ 0 या अधिक लगातार "a" वर्णों की खोज करता है। तारक "a*" के साथ a खोजने के लिए - विशेष के सामने \ लगाएं। प्रतीक: /a\*/ .
^ इनपुट डेटा की शुरुआत को इंगित करता है। यदि मल्टीलाइन खोज ध्वज ("एम") सेट किया गया है, तो यह एक नई लाइन की शुरुआत पर भी सक्रिय होगा, उदाहरण के लिए, /^ए/ "ए" में "ए" नहीं ढूंढेगा, लेकिन पहले को ढूंढेगा "ए" में "ए ए।"
$ इनपुट डेटा के अंत का संकेत देता है. यदि मल्टीलाइन सर्च फ़्लैग सेट है, तो यह पंक्ति के अंत में भी काम करेगा। उदाहरण के लिए, /t$/ को "ईटर" में "टी" नहीं मिलेगा, लेकिन यह इसे "ईट" में मिलेगा।
* 0 या अधिक बार दोहराव का संकेत देता है. उदाहरण के लिए, /bo*/ को "ए घोस्ट बूउड" में "बूउ" और "ए बर्ड वॉर्ब्लड" में "बी" मिलेगा, लेकिन "ए बकरी ग्रन्टेड" में कुछ भी नहीं मिलेगा।
+ 1 या अधिक बार दोहराव का संकेत देता है. (1,) के बराबर। उदाहरण के लिए, /a+/ "कैंडी" में "a" और "caaaanandy" में सभी "a" से मेल खाएगा।
? इंगित करता है कि तत्व मौजूद हो भी सकता है और नहीं भी। उदाहरण के लिए, /e?le?/ "एंजेल" में "el" और "कोण" में "le" से मेल खाएगा यदि किसी एक क्वांटिफायर के तुरंत बाद उपयोग किया जाए * , + , ? , या (), फिर डिफ़ॉल्ट "लालची" मोड के विपरीत एक "गैर-लालची" खोज (निकटतम अगले पैटर्न तत्व के लिए संभव न्यूनतम संख्या को दोहराते हुए) निर्दिष्ट करता है, जो दोहराव की संख्या को अधिकतम करता है, भले ही अगला पैटर्न तत्व भी मेल खाता है, ? पूर्वावलोकन में उपयोग किया जाता है, जिसका वर्णन (?=) , (?!) , और (?:) के अंतर्गत तालिका में किया गया है।
. (दशमलव बिंदु) नई पंक्ति के अलावा किसी भी वर्ण का प्रतिनिधित्व करता है: \n \r \u2028 या \u2029। (आप नई पंक्तियों सहित किसी भी चरित्र को खोजने के लिए [\s\S] का उपयोग कर सकते हैं)। उदाहरण के लिए, /.n/ "नहीं, एक सेब पेड़ पर है" में "ए" और "ऑन" से मेल खाएगा, लेकिन "नहीं" में नहीं।
(एक्स)x ढूँढता है और याद रखता है। इसे "मेमोरी ब्रैकेट्स" कहा जाता है। उदाहरण के लिए, /(foo)/ "फू बार" में "फू" ढूंढेगा और याद रखेगा। पाए गए सबस्ट्रिंग को खोज परिणाम सरणी में या रेगएक्सपी ऑब्जेक्ट के पूर्वनिर्धारित गुणों में संग्रहीत किया जाता है: $1, ..., $9 इसके अलावा, कोष्ठक उनमें जो भी शामिल है उसे एक एकल पैटर्न तत्व में जोड़ते हैं। उदाहरण के लिए, (एबीसी)* - एबीसी 0 या अधिक बार दोहराएं।
(?:एक्स)x ढूँढता है, लेकिन यह याद नहीं रखता कि उसे क्या मिला। इसे "स्मृति कोष्ठक" कहा जाता है। पाए गए सबस्ट्रिंग को परिणाम सरणी और रेगएक्सपी गुणों में संग्रहीत नहीं किया जाता है, सभी ब्रैकेट की तरह, वे उनमें जो कुछ है उसे एक एकल उपपैटर्न में जोड़ते हैं।
एक्स(?=y)x तभी ढूँढता है यदि x के बाद y आता है। उदाहरण के लिए, /जैक(?=स्प्रैट)/ केवल "जैक" से मेल खाएगा यदि उसके बाद "स्प्रैट" आता है। /जैक(?=स्प्रैट|फ्रॉस्ट)/ केवल "जैक" से मेल खाएगा यदि इसके बाद "स्प्रैट" या "फ्रॉस्ट" आता है। हालाँकि, खोज परिणाम में न तो "स्प्रैट" और न ही "फ्रॉस्ट" दिखाई देंगे।
x(?!y)x को केवल तभी ढूँढता है यदि x के बाद y न हो। उदाहरण के लिए, /\d+(?!\.)/ केवल तभी किसी संख्या से मेल खाएगा यदि उसके बाद दशमलव बिंदु न हो। /\d+(?!\.)/.exec('3.141'') 141 मिलेगा, लेकिन 3.141 नहीं।
एक्स|वाईx या y ढूँढता है। उदाहरण के लिए, /हरा|लाल/ "हरा सेब" में "हरा" और "लाल सेब" में "लाल" से मेल खाएगा।
(एन)जहाँ n एक धनात्मक पूर्णांक है। पूर्ववर्ती तत्व की बिल्कुल n पुनरावृत्ति ढूँढता है। उदाहरण के लिए, /a(2)/ को "कैंडी" में "ए" नहीं मिलेगा, लेकिन "कैंडी" में दोनों ए और "कैंडी" में पहले दो ए मिलेंगे।
(एन,)जहाँ n एक धनात्मक पूर्णांक है। किसी तत्व की n या अधिक पुनरावृत्ति ढूँढता है। उदाहरण के लिए, /a(2,) को "कैंडी" में "a" नहीं मिलेगा, लेकिन "caandy" और "caaaanandy" में सभी "a" मिलेंगे।
(एन,एम)जहाँ n और m धनात्मक पूर्णांक हैं। तत्व की n से m तक पुनरावृत्ति ज्ञात कीजिए।
अक्षरों का समूह। सूचीबद्ध वर्णों में से कोई भी ढूँढता है। आप डैश का उपयोग करके रिक्ति को इंगित कर सकते हैं। उदाहरण के लिए, - के समान। "ब्रिस्केट" में "बी" और "दर्द" में "ए" और "सी" से मेल खाता है।
[^xyz]सेट में निर्दिष्ट वर्णों के अलावा कोई भी वर्ण। आप एक अवधि भी निर्दिष्ट कर सकते हैं. उदाहरण के लिए, [^abc], [^a-c] के समान है। "ब्रिस्केट" में "आर" और "चॉप" में "एच" ढूँढता है।
[\बी]बैकस्पेस कैरेक्टर ढूँढता है। (\b से भ्रमित न हों।)
\बीएक (लैटिन) शब्द सीमा ढूँढता है, जैसे कि एक स्थान। ([\b] से भ्रमित न हों)। उदाहरण के लिए, /\bn\w/ "दोपहर" में "नहीं" से मेल खाएगा; /\wy\b/ "संभवतः कल" में "ly" ढूंढेगा।
\बीयह शब्द सीमा का संकेत नहीं देता. उदाहरण के लिए, /\w\Bn/ "दोपहर" में "चालू" से मेल खाएगा, और /y\B\w/ "संभवतः कल" में "ये" से मेल खाएगा।
\cXजहाँ X, A से Z तक का एक अक्षर है। एक स्ट्रिंग में एक नियंत्रण वर्ण को इंगित करता है। उदाहरण के लिए, /\cM/ Ctrl-M वर्ण का प्रतिनिधित्व करता है।
\डीकिसी भी वर्णमाला से एक संख्या ढूँढता है (हमारा यूनिकोड है)। केवल नियमित संख्याएँ खोजने के लिए उपयोग करें। उदाहरण के लिए, /\d/ या // "बी2 सूइट नंबर है" में "2" से मेल खाएगा।
\डीएक गैर-संख्यात्मक वर्ण (सभी अक्षर) ढूँढता है। [^0-9] नियमित संख्याओं के समतुल्य है। उदाहरण के लिए, /\D/ या /[^0-9]/ "B2 सुइट नंबर है" में "B" से मेल खाएगा।
\एसस्पेस, टैब, न्यूलाइन और अन्य यूनिकोड व्हाइटस्पेस वर्णों सहित किसी भी व्हाइटस्पेस वर्ण को ढूँढता है। उदाहरण के लिए, /\s\w*/ "फू बार" में "बार" से मेल खाएगा।
\एसरिक्त स्थान को छोड़कर कोई भी वर्ण ढूँढता है। उदाहरण के लिए, /\S\w*/ "फू बार" में "फू" से मेल खाएगा।
\vलंबवत टैब वर्ण.
\wअक्षरों, संख्याओं और अंडरस्कोर सहित किसी भी शब्द (लैटिन वर्णमाला) वर्ण को ढूँढता है। समकक्ष। उदाहरण के लिए, /\w/ "apple" में "a", "$5.28" में "5" और "3D" में "3" से मेल खाएगा।
\Wकोई गैर-(लैटिन) मौखिक चरित्र ढूँढता है। [^A-Za-z0-9_] के बराबर। उदाहरण के लिए, /\W/ और /[^$A-Za-z0-9_]/ समान रूप से "50%" में "%" से मेल खाएंगे।

जावास्क्रिप्ट में रेगुलर एक्सप्रेशन के साथ कार्य करना

जावास्क्रिप्ट में रेगुलर एक्सप्रेशन के साथ कार्य करना स्ट्रिंग क्लास के तरीकों द्वारा कार्यान्वित किया जाता है

exec(regexp) - एक स्ट्रिंग में सभी मिलान (नियमित पैटर्न में प्रविष्टियाँ) ढूँढता है। एक सरणी लौटाता है (यदि कोई मेल है) और regexp प्रॉपर्टी को अपडेट करता है, या यदि कुछ नहीं मिलता है तो शून्य कर देता है। जी संशोधक के साथ - हर बार जब इस फ़ंक्शन को कॉल किया जाता है, तो यह पिछले पाए गए मिलान के बाद अगला मिलान लौटाएगा - इसे अंतिम खोज के ऑफसेट इंडेक्स को बनाए रखते हुए कार्यान्वित किया जाता है।

मैच(regexp) - एक पैटर्न का उपयोग करके स्ट्रिंग का हिस्सा ढूंढें। यदि जी संशोधक निर्दिष्ट है, तो मिलान() सभी मिलानों की एक सरणी या शून्य (खाली सरणी के बजाय) लौटाता है। जी संशोधक के बिना, यह फ़ंक्शन exec() की तरह काम करता है;

परीक्षण(regexp) - फ़ंक्शन एक पैटर्न से मिलान के लिए एक स्ट्रिंग की जांच करता है। यदि मेल है तो सत्य लौटाता है, और यदि मेल नहीं है तो असत्य लौटाता है।

स्प्लिट (regexp) - एक सीमांकक के रूप में तर्क का उपयोग करके, जिस स्ट्रिंग पर इसे बुलाया जाता है उसे सबस्ट्रिंग की एक सरणी में विभाजित करता है।

प्रतिस्थापित करें (रेगएक्सपी, मिक्स) - विधि टेम्पलेट (नियमित अभिव्यक्ति) के अनुसार एक संशोधित स्ट्रिंग लौटाती है। रेगेक्सपी का पहला पैरामीटर रेगुलर एक्सप्रेशन के बजाय एक स्ट्रिंग भी हो सकता है। जी संशोधक के बिना, पंक्ति में विधि केवल पहली घटना को प्रतिस्थापित करती है; संशोधक जी के साथ - एक वैश्विक प्रतिस्थापन होता है, अर्थात। किसी पंक्ति में सभी घटनाएँ बदल जाती हैं। मिश्रण - प्रतिस्थापन टेम्पलेट, एक स्ट्रिंग, प्रतिस्थापन टेम्पलेट, फ़ंक्शन (फ़ंक्शन नाम) के मान स्वीकार कर सकता है।

प्रतिस्थापन स्ट्रिंग में विशेष वर्ण

फ़ंक्शन के माध्यम से प्रतिस्थापन

यदि आप किसी फ़ंक्शन को दूसरे पैरामीटर के रूप में निर्दिष्ट करते हैं, तो इसे प्रत्येक मैच के लिए निष्पादित किया जाता है। एक फ़ंक्शन गतिशील रूप से एक प्रतिस्थापन स्ट्रिंग उत्पन्न और वापस कर सकता है। फ़ंक्शन का पहला पैरामीटर पाया गया सबस्ट्रिंग है। यदि प्रतिस्थापित करने वाला पहला तर्क एक RegExp ऑब्जेक्ट है, तो अगले n पैरामीटर में नेस्टेड कोष्ठक मिलान होते हैं। अंतिम दो पैरामीटर उस पंक्ति की स्थिति हैं जहां मिलान हुआ और स्वयं पंक्ति।

नया रेगएक्सपी (पैटर्न[, झंडे])

नियमित अभिव्यक्ति अग्रिम

ह ज्ञात है कि शाब्दिक वाक्यविन्यास को प्राथमिकता दी जाती है(/परीक्षण/i).

यदि रेगुलर एक्सप्रेशन पहले से ज्ञात नहीं है, तो कंस्ट्रक्टर (नया रेगएक्सपी) का उपयोग करके एक रेगुलर एक्सप्रेशन (कैरेक्टर स्ट्रिंग में) बनाना बेहतर है।

लेकिन ध्यान दें, चूंकि "स्लैश साइन" \ कोड स्विचिंग की भूमिका निभाता है, इसलिए इसे स्ट्रिंग अक्षरशः (नया रेगएक्सपी) में दो बार लिखना होगा: \\

झंडे

मिलान करते समय मैं मामले को नजरअंदाज कर देता हूं

जी वैश्विक मिलान, स्थानीय मिलान के विपरीत (डिफ़ॉल्ट रूप से, केवल पैटर्न के पहले उदाहरण से मेल खाता है), पैटर्न के सभी उदाहरणों के मिलान की अनुमति देता है

ऑपरेटर्स

क्या कैसे विवरण प्रयोग
मैं झंडा रेग करता है. केस असंवेदनशील अभिव्यक्ति /टेस्टिक/आई
जी झंडा वैश्विक खोज /टेस्टिक/जी
एम झंडा टेक्स्टएरिया से प्राप्त की जा सकने वाली कई स्ट्रिंग्स के विरुद्ध मिलान की अनुमति देता है
चरित्र वर्ग संचालक चरित्र सेट मिलान - a से z तक की श्रेणी में कोई भी वर्ण;
^ कैरेट ऑपरेटर के अलावा [^a-z] - a से z तक की श्रेणी में वर्णों को छोड़कर कोई भी वर्ण;
- हाइफ़न ऑपरेटर मूल्यों की श्रेणी को सम्मिलित करते हुए इंगित करें - a से z तक की श्रेणी में कोई भी वर्ण;
\ पलायन संचालक किसी भी निम्नलिखित चरित्र से बच जाता है \\
^ मिलान ऑपरेटर प्रारंभ करें पैटर्न मिलान शुरुआत में होना चाहिए /^टेस्टिक/जी
$ मिलान का अंत ऑपरेटर पैटर्न मिलान अंत में होना चाहिए /टेस्टिक$/जी
? ऑपरेटर? चरित्र को वैकल्पिक बनाता है /t?est/g
+ ऑपरेटर + /t+est/g
+ ऑपरेटर + प्रतीक एक बार या एक से अधिक बार मौजूद होना चाहिए /t+est/g
* ऑपरेटर * प्रतीक एक बार या बार-बार उपस्थित होना चाहिए या पूरी तरह से अनुपस्थित होना चाहिए /t+est/g
{} ऑपरेटर() वर्ण दोहराव की एक निश्चित संख्या निर्धारित करें /t(4)est/g
{,} ऑपरेटर (,) किसी प्रतीक की पुनरावृत्ति की संख्या को निश्चित सीमा के भीतर निर्धारित करें /t(4,9)est/g

पूर्वनिर्धारित चरित्र वर्ग

पूर्वनिर्धारित सदस्य तुलना
\टी क्षैतिज टैब
\एन पंक्ति अनुवाद
. लाइन फ़ीड के अलावा कोई भी वर्ण
\डी कोई भी दसवाँ अंक, जो समतुल्य हो
\डी दसवें अंक के अलावा कोई भी वर्ण, जो [^0-9] के बराबर है
\w कोई भी वर्ण (संख्या, अक्षर और अंडरस्कोर) जो समतुल्य हो
\W संख्याओं, अक्षरों और अंडरस्कोर के अलावा कोई भी वर्ण, जो [^A-Za-z0-9] के बराबर है
\एस कोई भी अंतरिक्ष पात्र
\एस स्थान को छोड़कर कोई भी वर्ण
\बी शब्द सीमा
\बी शब्द की सीमा नहीं, आंतरिक है। भाग

समूहीकरण()

यदि आप सदस्यों के समूह में + (/(abcd)+/) जैसे ऑपरेटर को लागू करना चाहते हैं, तो आप कोष्ठक () का उपयोग कर सकते हैं।

आसक्ति

कोष्ठक में संलग्न नियमित अभिव्यक्ति का भाग () कहलाता है निर्धारण.

निम्नलिखित उदाहरण पर विचार करें:

/^()k\1/

\1 a , b , c में से कोई वर्ण नहीं है।
\1 कोई भी वर्ण है जो आरंभ करता है पहले अक्षर से मेल करें. अर्थात्, नियमित अभिव्यक्ति का समाधान होने तक \1 से मेल खाने वाला वर्ण अज्ञात है।

अनिर्धारित समूह

ब्रैकेट () का उपयोग 2 मामलों में किया जाता है: समूहीकरण के लिए और निर्धारण को दर्शाने के लिए। लेकिन ऐसी स्थितियाँ होती हैं जब हमें केवल समूहीकरण के लिए () का उपयोग करने की आवश्यकता होती है, क्योंकि कमिट की आवश्यकता नहीं होती है, इसके अलावा, अनावश्यक कमिट को हटाकर हम नियमित अभिव्यक्ति प्रसंस्करण तंत्र के लिए इसे आसान बनाते हैं।

ऐसा करने के लिए निर्धारण रोकेंआरंभिक कोष्ठक से पहले आपको यह डालना होगा: ?:

स्ट्र = "

नमस्ते दुनिया!
"; पाया गया = str.match(/<(?:\/?)(?:\w+)(?:[^>]*?)>/i); कंसोल.लॉग ("बिना सुधार के पाया गया:", पाया गया); // [ "
" ]

परीक्षण समारोह

रेगेक्सपी.टेस्ट()

परीक्षण फ़ंक्शन जाँचता है कि रेगुलर एक्सप्रेशन स्ट्रिंग (str) से मेल खाता है या नहीं। या तो सही या गलत लौटाता है।

उपयोग उदाहरण:

जावास्क्रिप्ट

फ़ंक्शन कोडF(str)( return /^\d(5)-\d(2)/.test(str); ) //console.log(codeF("12345-12ss")); // सत्य // कंसोल.लॉग (कोडएफ ("1245-12ss")); // असत्य

मिलान समारोह

str.match(regexp)

यदि कोई मिलान नहीं मिलता है तो मिलान फ़ंक्शन मानों की एक सरणी या शून्य लौटाता है। जाँच करना: यदि नियमित अभिव्यक्ति में जी ध्वज नहीं है (वैश्विक खोज करने के लिए), तो मिलान विधि स्ट्रिंग में पहला मिलान लौटा देगी, और, जैसा कि उदाहरण से देखा जा सकता है, मिलानों की एक सरणी में फिक्सेशन गिर जाते हैं(कोष्ठकों में संलग्न नियमित अभिव्यक्ति का भाग)।

जावास्क्रिप्ट

str = "जानकारी के लिए, कृपया देखें: अध्याय 3.4.5.1"; पुनः = /अध्याय (\d+(\.\d)*)/i // कमिट के साथ (वैश्विक ध्वज के बिना) मिला = str.match(re) कंसोल.लॉग(मिला); // ["अध्याय 3.4.5.1", "3.4.5.1", ".1"]

यदि आप वैश्विक नियमित अभिव्यक्ति (जी ध्वज के साथ) के साथ मिलान() विधि प्रदान करते हैं, तो एक सरणी भी लौटा दी जाएगी, लेकिन वैश्विक मैचों के साथ. यानी रिकॉर्ड किए गए नतीजे वापस नहीं आते.

जावास्क्रिप्ट

str = "जानकारी के लिए, देखें: अध्याय 3.4.5.1, अध्याय 7.5"; पुनः = /अध्याय (\d+(\.\d)*)/ig // बिना कमिट के - विश्व स्तर पर पाया गया = str.match(re) कंसोल.लॉग(पाया गया); // ["अध्याय 3.4.5.1", "अध्याय 7.5"]

निष्पादन समारोह

regexp.exec(str)

निष्पादन फ़ंक्शन जांचता है कि नियमित अभिव्यक्ति एक स्ट्रिंग (str) से मेल खाती है या नहीं। परिणामों की एक श्रृंखला (कमिट के साथ) या शून्य लौटाता है। निष्पादन विधि के लिए प्रत्येक आगामी कॉल (उदाहरण के लिए, कब जबकि का उपयोग करना) होता है (के कारण स्वचालित अपडेटजब अंतिम खोज के अंत का सूचकांक निष्पादित होता है (lastIndex) अगले वैश्विक मिलान में चला जाता है (यदि g ध्वज निर्दिष्ट है)।

जावास्क्रिप्ट

वर html = "
बम! बम!
"; var reg = /<(\/?)(\w+)([^>]*?)>/जी; //कंसोल.लॉग(reg.exec(html)); // ["
", "", "div", " class='test""] while((match = reg.exec(html)) !== null)( console.log(reg.exec(html)); ) /* [" ", "", "बी", ""] [" ", "", "उन्हें", ""] ["
", "/", "div", ""] */

वैश्विक ध्वज के बिना, मिलान और निष्पादन विधियाँ समान रूप से काम करती हैं। यानी, वे पहले वैश्विक मिलान के साथ एक सरणी लौटाते हैं और प्रतिबद्ध होते हैं।

जावास्क्रिप्ट

// मिलान var html = "
बम! बम!
"; var reg = /<(\/?)(\w+)([^>]*?)>/; // बिना ग्लोबल कंसोल.लॉग(html.match(reg)); // ["
", "", "div", " class='test""] // exec var html = "
बम! बम!
"; var reg = /<(\/?)(\w+)([^>]*?)>/; // बिना ग्लोबल कंसोल.लॉग(reg.exec(html)); // ["
", "", "div", " class='test""]

फ़ंक्शन बदलें

str.replace(regexp, newSubStr|फ़ंक्शन)
  • रेगएक्सपी - रेग। अभिव्यक्ति;
  • newSubStr - वह स्ट्रिंग जिससे पाठ में पाया गया अभिव्यक्ति बदला जाता है;
  • फ़ंक्शन - पैरामीटर की एक परिवर्तनीय सूची के साथ पाए गए प्रत्येक मिलान के लिए बुलाया जाता है (याद रखें कि एक स्ट्रिंग में एक वैश्विक खोज एक पैटर्न मिलान के सभी उदाहरण ढूंढती है)।

इस फ़ंक्शन का रिटर्न मान प्रतिस्थापन के रूप में कार्य करता है।

फ़ंक्शन पैरामीटर:

  • 1 - पूर्ण मिलान वाली सबस्ट्रिंग।
  • 2 - कोष्ठक समूहों (निर्धारण) का अर्थ.
  • 3 - स्रोत स्ट्रिंग में मिलान का सूचकांक (स्थिति)।
  • 4 - स्रोत स्ट्रिंग.

विधि कॉलिंग स्ट्रिंग को नहीं बदलती है, लेकिन मिलानों को बदलने के बाद एक नई स्ट्रिंग लौटाती है। वैश्विक खोज करने और बदलने के लिए, g ध्वज के साथ regexp का उपयोग करें।

"GHGHGHGTTTT"।replace(//g,"K"); //"केकेकेकेकेकेकेकेकेके"

जावास्क्रिप्ट

फ़ंक्शन upLetter(allStr,letter) (वापसी पत्र.toUpperCase(); ) var res = "border-top-width.replace(/-(\w)/g, upLetter); कंसोल.लॉग(रेस); //बॉर्डरटॉपविथ

नियमित अभिव्यक्तिएक ऐसी भाषा है जो मेटाएक्टर्स के आधार पर स्ट्रिंग पैटर्न का वर्णन करती है। मेटाकैरेक्टर एक नियमित अभिव्यक्ति में एक चरित्र है जो एक स्ट्रिंग में वर्णों के कुछ वर्ग का वर्णन करता है, एक सबस्ट्रिंग की स्थिति को इंगित करता है, दोहराव की संख्या को इंगित करता है, या वर्णों को एक सबस्ट्रिंग में समूहित करता है। उदाहरण के लिए, मेटाकैरेक्टर \d अंकों का वर्णन करता है, और $ एक पंक्ति के अंत को दर्शाता है। एक नियमित अभिव्यक्ति में सामान्य अक्षर भी शामिल हो सकते हैं जो स्वयं का वर्णन करते हैं। रेगुलर एक्सप्रेशन में मेटाकैरेक्टर का सेट और अर्थ पीसीआरई मानक द्वारा वर्णित है, जिनकी अधिकांश विशेषताएं जेएस में समर्थित हैं।

नियमित अभिव्यक्ति का दायरा

रेगुलर एक्सप्रेशन का उपयोग आमतौर पर निम्नलिखित कार्यों के लिए किया जाता है:

  • तुलना. इस कार्य का लक्ष्य यह पता लगाना होगा कि क्या कोई निश्चित पाठ किसी दिए गए नियमित अभिव्यक्ति से मेल खाता है।
  • खोज. नियमित अभिव्यक्तियों का उपयोग करके, संबंधित सबस्ट्रिंग ढूंढना और उन्हें पाठ से निकालना सुविधाजनक है।
  • प्रतिस्थापन. रेगुलर एक्सप्रेशन अक्सर न केवल ढूंढने में मदद करते हैं, बल्कि टेक्स्ट में रेगुलर एक्सप्रेशन से मेल खाने वाले सबस्ट्रिंग को बदलने में भी मदद करते हैं।

अंततः, नियमित अभिव्यक्तियों का उपयोग करके आप यह कर सकते हैं, उदाहरण के लिए:

  • जांचें कि फॉर्म में उपयोगकर्ता डेटा सही ढंग से भरा गया है।
  • उपयोगकर्ता द्वारा दर्ज किए गए पाठ में एक छवि का लिंक ढूंढें ताकि इसे स्वचालित रूप से संदेश से जोड़ा जा सके।
  • टेक्स्ट से html टैग हटाएँ.
  • सरल सिंटैक्स त्रुटियों के लिए संकलन से पहले कोड की जाँच करें।

जेएस में रेगुलर एक्सप्रेशन की विशेषताएं। नियमित अभिव्यक्ति शाब्दिक

JS में रेगुलर एक्सप्रेशन की मुख्य विशेषता यह है कि उनके लिए एक अलग प्रकार का शाब्दिक अर्थ होता है। जिस प्रकार स्ट्रिंग अक्षर उद्धरण चिह्नों से घिरे होते हैं, उसी प्रकार नियमित अभिव्यक्ति अक्षर स्लैश (/) से घिरे होते हैं। इस प्रकार, JS कोड में निम्नलिखित अभिव्यक्तियाँ हो सकती हैं:

कंसोल.लॉग(टाइपऑफ़ /टीकोडर/); // वस्तु

दरअसल, रेगुलर एक्सप्रेशन जिसे लाइन में परिभाषित किया गया है

var पैटर्न = नया रेगएक्सपी ("टीकोडर");

यह निर्माण विधि आमतौर पर तब उपयोग की जाती है जब आपको रेगुलर एक्सप्रेशन में वेरिएबल्स का उपयोग करने की आवश्यकता होती है, या गतिशील रूप से रेगुलर एक्सप्रेशन बनाने की आवश्यकता होती है। अन्य सभी मामलों में, छोटे वाक्यविन्यास और कुछ वर्णों से अतिरिक्त बचने की आवश्यकता के अभाव के कारण नियमित अभिव्यक्ति शाब्दिक का उपयोग किया जाता है।

नियमित अभिव्यक्ति में वर्ण

नियमित अभिव्यक्तियों में सभी अल्फ़ान्यूमेरिक वर्ण मेटाकैरेक्टर नहीं हैं और स्वयं का वर्णन करते हैं। इसका मतलब यह है कि रेगुलर एक्सप्रेशन /टीकोडर/सबस्ट्रिंग टीकोडर से मेल खाएगा। रेगुलर एक्सप्रेशन में, आप गैर-वर्णमाला वर्ण भी निर्दिष्ट कर सकते हैं, जैसे न्यूलाइन (\n), टैब (\t) इत्यादि। ये सभी प्रतीक भी आपस में मेल खाते हैं। किसी वर्णमाला वर्ण के पहले बैकस्लैश (\) लगाने से वह मेटाकैरेक्टर बन जाएगा, यदि कोई है। उदाहरण के लिए, वर्णमाला वर्ण "d" संख्याओं का वर्णन करने वाला एक मेटाकैरेक्टर बन जाएगा यदि उसके पहले एक स्लैश (\d) हो।

चरित्र वर्ग

नियमित अभिव्यक्तियों में एकल वर्णों को वर्गाकार कोष्ठकों का उपयोग करके वर्गों में समूहीकृत किया जा सकता है। इस प्रकार बनाया गया वर्ग इसमें शामिल किसी भी प्रतीक से मेल खाता है। उदाहरण के लिए, नियमित अभिव्यक्ति // अक्षर "t", "c", "o", "d", "e", "r" अनुरूप होंगे।

कक्षाओं में आप हाइफ़न का उपयोग करके वर्णों की एक श्रृंखला भी निर्दिष्ट कर सकते हैं। उदाहरण के लिए, एक वर्ग एक वर्ग से मेल खाता है। ध्यान दें कि रेगुलर एक्सप्रेशन में कुछ मेटाएक्टर पहले से ही चरित्र वर्गों का वर्णन करते हैं। उदाहरण के लिए, \d मेटाकैरेक्टर वर्ग के समतुल्य है। ध्यान दें कि वर्ण वर्गों का वर्णन करने वाले मेटाकैरेक्टर्स को भी कक्षाओं में शामिल किया जा सकता है। उदाहरण के लिए, वर्ग [\da-f] संख्याओं और अक्षरों "ए", "बी", "डी", "ई", "एफ", यानी किसी भी हेक्साडेसिमल वर्ण से मेल खाता है।

किसी वर्ण वर्ग का वर्णन उन वर्णों को निर्दिष्ट करके करना भी संभव है जिन्हें इसमें शामिल नहीं किया जाना चाहिए। यह मेटाकैरेक्टर ^ का उपयोग करके किया जाता है। उदाहरण के लिए, वर्ग [^\d] किसी संख्या के अलावा किसी भी वर्ण से मेल खाएगा।

repetitions

अब हम वर्णन कर सकते हैं, कह सकते हैं, दशमलव संख्याकिसी भी लंबाई की, बस एक पंक्ति में उतने मेटाअक्षर \d लिखकर, जितने इस संख्या में अंक हैं। सहमत हूँ कि यह दृष्टिकोण बहुत सुविधाजनक नहीं है। इसके अलावा, हम आवश्यक दोहराव की सीमा का वर्णन नहीं कर सकते। उदाहरण के लिए, हम एक या दो अंकों वाली संख्या का वर्णन नहीं कर सकते। सौभाग्य से, नियमित अभिव्यक्ति मेटाचैक्टर का उपयोग करके पुनरावृत्ति श्रेणियों का वर्णन करने की क्षमता प्रदान करती है। ऐसा करने के लिए, प्रतीक के बाद, बस दोहराव की सीमा को इंगित करें घुंघराले ब्रेसिज़. उदाहरण के लिए, नियमित अभिव्यक्ति /tco(1,3)der/तार "tcooder", "tcoooder" और "tcoooder" मेल खाएंगे। यदि आप दोहराव की अधिकतम संख्या को छोड़ देते हैं, अल्पविराम और न्यूनतम संख्या में दोहराव छोड़ते हैं, तो आप निर्दिष्ट एक से अधिक दोहराव की संख्या निर्दिष्ट कर सकते हैं। उदाहरण के लिए, नियमित अभिव्यक्ति /बीओ(2,)बीएस/स्ट्रिंग "बूब्स", "बूब्स", "बूओब्स" और इसी तरह किसी भी संख्या में "ओ" अक्षरों से मेल खाएगा, कम से कम दो।

यदि आप घुंघराले कोष्ठक में अल्पविराम को हटा देते हैं और केवल एक संख्या दर्शाते हैं, तो यह दोहराव की सटीक संख्या को इंगित करेगा। उदाहरण के लिए, नियमित अभिव्यक्ति /\d(5)/पाँच अंकों की संख्या के अनुरूप।

कुछ पुनरावृत्ति श्रेणियाँ अक्सर उपयोग की जाती हैं और उन्हें दर्शाने के लिए उनके अपने मेटाकैरेक्टर होते हैं।

लालची दोहराव

उपरोक्त सिंटैक्स दोहराव की अधिकतम संख्या का वर्णन करता है, अर्थात, दोहराव की सभी संभावित संख्याओं में से, जिसकी संख्या निर्दिष्ट सीमा में है, अधिकतम का चयन किया जाता है। ऐसे दोहराव को लालची कहा जाता है। इसका मतलब यह है कि स्ट्रिंग में नियमित अभिव्यक्ति /\d+/ हाँ!!111 सबस्ट्रिंग "111" से मेल खाएगा, न कि "11" या "1" से, हालांकि मेटाकैरेक्टर "+" एक या अधिक दोहराव का वर्णन करता है।

यदि आप गैर-लालची दोहराव लागू करना चाहते हैं, यानी, निर्दिष्ट सीमा से न्यूनतम संभव संख्या में दोहराव का चयन करें, तो बस "?" डालें। प्रतिनिधि श्रेणी के बाद. उदाहरण के लिए, नियमित अभिव्यक्ति /\d+?/स्ट्रिंग "हाँ!! 111" में सबस्ट्रिंग "1" और रेगुलर एक्सप्रेशन मेल खाएंगे /\d(2,)/उसी पंक्ति में सबस्ट्रिंग "11" मेल खाएगा।

गैर-लालची दोहराव की एक महत्वपूर्ण विशेषता पर ध्यान देना उचित है। रेगुलर एक्सप्रेशन पर विचार करें /bo(2,)?bs/. पंक्ति "मुझे बड़े बूबूब पसंद हैं" में इसका मिलान, लालची दोहराव के साथ, सबस्ट्रिंग बूबूब से किया जाएगा, न कि स्तन से, जैसा कि कोई सोच सकता है। तथ्य यह है कि एक रेगुलर एक्सप्रेशन एक मैच में लाइन में विभिन्न स्थानों पर स्थित कई सबस्ट्रिंग से मेल नहीं खा सकता है। अर्थात्, हमारी नियमित अभिव्यक्ति "boo" और "bs" सबस्ट्रिंग को एक पंक्ति में विलीन करने से मेल नहीं खा सकती है।

वैकल्पिक

रेगुलर एक्सप्रेशन में, आप विकल्पों का भी उपयोग कर सकते हैं - स्ट्रिंग्स के एक सेट का वर्णन करने के लिए जो रेगुलर एक्सप्रेशन के एक या दूसरे भाग से मेल खाता है। ऐसे भागों को विकल्प कहा जाता है और इन्हें प्रयोग करके अलग किया जाता है ऊर्ध्वाधर रेखा. उदाहरण के लिए, नियमित अभिव्यक्ति /दो|दो बार|\2/या तो सबस्ट्रिंग "दो", या सबस्ट्रिंग "दो बार", या सबस्ट्रिंग "2" मेल खा सकता है। विकल्पों की श्रृंखला को पहले मिलान तक बाएं से दाएं संसाधित किया जाता है और केवल एक विकल्प द्वारा वर्णित सबस्ट्रिंग द्वारा मिलान किया जा सकता है। उदाहरण के लिए, नियमित अभिव्यक्ति /जावा|स्क्रिप्ट/स्ट्रिंग "मुझे जावास्क्रिप्ट पसंद है" में केवल सबस्ट्रिंग "जावा" मेल खाएगा।

समूह

पुनरावृत्ति श्रेणियों, चरित्र वर्गों और उनके बीच की सभी चीज़ों का उपयोग करते समय एकाधिक वर्णों को एक इकाई के रूप में मानने के लिए, बस उन्हें कोष्ठक में रखें। उदाहरण के लिए, नियमित अभिव्यक्ति /सत्य(कोडर)?/स्ट्रिंग "ट्रूकोडर" और "ट्रू" मेल खाएंगे।

लिंक

इस तथ्य के अलावा कि कोष्ठक एक नियमित अभिव्यक्ति में वर्णों को एक पूरे में जोड़ते हैं, संबंधित सबस्ट्रिंग को स्लैश के बाद उसके आसपास के कोष्ठकों की जोड़ी से बाएं कोष्ठक की संख्या निर्दिष्ट करके संदर्भित किया जा सकता है। कोष्ठकों को एक से शुरू करके बाएँ से दाएँ क्रमांकित किया जाता है। उदाहरण के लिए, रेगुलर एक्सप्रेशन में /(एक दो तीन चार)/\1 का तात्पर्य एक से है, \2 से "दो", \3 से "तीन", \4 से "चार" का है। ऐसे लिंक का उपयोग करने के उदाहरण के रूप में, हम एक रेगुलर एक्सप्रेशन देते हैं /(\d)\1/, जो समान अंकों वाली दो-अंकीय संख्याओं से मेल खाता है। एक महत्वपूर्ण सीमाबैकलिंक्स का उपयोग कक्षाओं में उनका उपयोग करने की असंभवता है, उदाहरण के लिए, दो अंकों की संख्या का वर्णन करने के लिए अलग-अलग नंबरनियमित अभिव्यक्ति /(\d)[^\1]/यह वर्जित है।

अविस्मरणीय कोष्ठक

अक्सर आप केवल प्रतीकों को समूहीकृत करना चाहते हैं, लेकिन लिंक बनाने की कोई आवश्यकता नहीं है। इस स्थिति में, आप बाएँ समूहीकरण कोष्ठक के ठीक बाद ?: लिख सकते हैं। उदाहरण के लिए, रेगुलर एक्सप्रेशन में /(एक दो तीन)/\2 "तीन" को इंगित करेगा।

ऐसे कोष्ठकों को कभी-कभी गैर-स्मरणीय कहा जाता है। उनकी एक और महत्वपूर्ण विशेषता है, जिसके बारे में हम अगले पाठ में बात करेंगे।

एक पद निर्दिष्ट करना

रेगुलर एक्सप्रेशन में, मेटाकैरेक्टर भी होते हैं जो स्ट्रिंग में एक निश्चित स्थिति का संकेत देते हैं। सबसे अधिक उपयोग किए जाने वाले प्रतीक ^ और $ हैं, जो एक पंक्ति की शुरुआत और अंत को दर्शाते हैं। उदाहरण के लिए, नियमित अभिव्यक्ति /\..+$/ फ़ाइल नामों में एक्सटेंशन मेल खाएंगे, और नियमित अभिव्यक्ति /^\d/पंक्ति में पहला अंक, यदि कोई है।

सकारात्मक और नकारात्मक अग्रेषण जाँचें

रेगुलर एक्सप्रेशन का उपयोग करके, आप किसी ऐसे सबस्ट्रिंग का भी वर्णन कर सकते हैं जिसका अनुसरण किसी अन्य पैटर्न द्वारा वर्णित सबस्ट्रिंग द्वारा किया जाता है या नहीं किया जाता है। उदाहरण के लिए, हमें जावा शब्द को केवल तभी ढूंढना होगा जब उसके बाद "स्क्रिप्ट" आए। इस समस्या को रेगुलर एक्सप्रेशन का उपयोग करके हल किया जा सकता है /जावा(?=स्क्रिप्ट)/. यदि हमें उस सबस्ट्रिंग "जावा" का वर्णन करने की आवश्यकता है जिसका स्क्रिप्ट द्वारा अनुसरण नहीं किया जाता है, तो हम एक नियमित अभिव्यक्ति का उपयोग कर सकते हैं /जावा(?!स्क्रिप्ट)/.

आइए ऊपर बताई गई सभी बातों को एक तालिका में एकत्रित करें।

प्रतीक अर्थ
ए|बी a या i से मेल खाता है।
(…) समूहीकरण कोष्ठक. आप कोष्ठक में पैटर्न के अनुरूप सबस्ट्रिंग का भी उल्लेख कर सकते हैं।
(?:…) लिंक करने की क्षमता के बिना, केवल समूहीकरण।
\एन nवें पैटर्न से मेल खाने वाली सबस्ट्रिंग से लिंक करें।
^ इनपुट डेटा की शुरुआत या लाइन की शुरुआत।
$ इनपुट का अंत या पंक्ति का अंत.
ए(?=बी) पैटर्न ए द्वारा वर्णित सबस्ट्रिंग से तभी मेल खाता है जब इसके बाद पैटर्न बी द्वारा वर्णित सबस्ट्रिंग आती है।
ए(?!बी) पैटर्न ए द्वारा वर्णित सबस्ट्रिंग से तभी मेल खाता है जब उसका अनुसरण किया जाता है नहींपैटर्न बी द्वारा वर्णित सबस्ट्रिंग का अनुसरण करता है।

झंडे

और अंत में, रेगुलर एक्सप्रेशन सिंटैक्स का अंतिम तत्व। झंडे मिलान नियम निर्दिष्ट करते हैं जो संपूर्ण नियमित अभिव्यक्ति पर लागू होते हैं। रेगुलर एक्सप्रेशन सिंटैक्स में अन्य सभी तत्वों के विपरीत, उन्हें रेगुलर एक्सप्रेशन शाब्दिक के तुरंत बाद लिखा जाता है, या ऑब्जेक्ट के कंस्ट्रक्टर के दूसरे पैरामीटर के रूप में लाइन में पास किया जाता है रेगुलर एक्सप्रेशन.

जावास्क्रिप्ट में केवल तीन नियमित अभिव्यक्ति झंडे हैं:

मैं- इस ध्वज को निर्दिष्ट करते समय, मामले को ध्यान में नहीं रखा जाता है, उदाहरण के लिए, एक नियमित अभिव्यक्ति \जावास्क्रिप्ट\iस्ट्रिंग्स "जावास्क्रिप्ट", "जावास्क्रिप्ट", "जावास्क्रिप्ट", "जावास्क्रिप्ट", आदि से मेल खाएगा।

एम- यह ध्वज बहु-पंक्ति खोज को सक्षम बनाता है। इसका मतलब यह है कि यदि पाठ में पंक्ति फ़ीड वर्ण हैं और यह ध्वज सेट है, तो संपूर्ण पाठ की शुरुआत और अंत के अलावा, ^ और $ प्रतीक भी पाठ में प्रत्येक पंक्ति की शुरुआत और अंत के अनुरूप होंगे। उदाहरण के लिए, नियमित अभिव्यक्ति /लाइन$/मीस्ट्रिंग "पहली पंक्ति" और स्ट्रिंग "एक\nदूसरी पंक्ति\nदो" दोनों में सबस्ट्रिंग "लाइन" से मेल खाता है।

जी- एक वैश्विक खोज को सक्षम करता है, अर्थात, एक नियमित अभिव्यक्ति, यदि यह ध्वज सक्षम है, तो इससे मेल खाने वाले सभी सबस्ट्रिंग से मेल खाएगा, न कि केवल पहले से, जैसा कि यह ध्वज मौजूद नहीं होने पर होता है।

झंडों को किसी भी क्रम में एक दूसरे के साथ जोड़ा जा सकता है \tकोडर\मिग, \tकोडर\गिम, \tocder\gmiइत्यादि, यह एक ही बात है. यदि झंडे को ऑब्जेक्ट कंस्ट्रक्टर के दूसरे तर्क के रूप में एक पंक्ति में पारित किया जाता है तो झंडे का क्रम भी मायने नहीं रखता है रेगुलर एक्सप्रेशन, वह है नया रेगएक्सपी('टीकोडर', 'आईएम')और नया रेगएक्सपी('टीकोडर', 'आईएम')बिल्कुल वही बात.

ZY

नियमित अभिव्यक्तियाँ बहुत शक्तिशाली हैं और उपयोगी उपकरणस्ट्रिंग्स के साथ काम करने के लिए, आपको कोड की सैकड़ों पंक्तियों को एक ही अभिव्यक्ति में कम करने की अनुमति देता है। दुर्भाग्य से, उनका वाक्य-विन्यास कभी-कभी बहुत जटिल और पढ़ने में कठिन होता है, और यहां तक ​​​​कि सबसे अनुभवी डेवलपर भी यह भूल सकता है कि कुछ दिन पहले उसने जो जटिल नियमित अभिव्यक्ति लिखी थी, उसका क्या मतलब था अगर उसने इस पर टिप्पणी नहीं की। इन कारणों से, कभी-कभी स्ट्रिंग्स के साथ काम करने के नियमित तरीकों के पक्ष में नियमित अभिव्यक्तियों को छोड़ना अभी भी उचित है।



मित्रों को बताओ