/ / रेगेक्स के साथ एक स्ट्रिंग का मिलान करना भले ही शून्य हो, लेकिन यह मैच करना चाहिए - जावास्क्रिप्ट, रेगेक्स

एक रेगेक्स के साथ एक स्ट्रिंग मिलान करना शून्य हो जाता है भले ही इसे मेल खाना चाहिए - जावास्क्रिप्ट, रेगेक्स

मैं जावास्क्रिप्ट में काम करने के लिए अपना रेगेक्स प्राप्त करने की कोशिश कर रहा हूं, लेकिन मुझे एक समस्या है।

कोड:

var reg = new RegExp("978d{10}");
var isbn = "9788740013498";
var res = isbn.match(reg);

console.log(res);

हालाँकि, res हमेशा है null कंसोल में।

यह काफी दिलचस्प है, क्योंकि रेगेक्स को काम करना चाहिए।

मेरा सवाल: फिर, एक स्ट्रिंग और रेगेक्स से मेल करने के लिए सही सिंटैक्स क्या है?

(यदि यह मायने रखता है और पर्यावरण में कोई भी कह सकता है: यह कोड ए से लिया गया है app.get में बनाया गया दृश्य Express.js मेरे में Node.js आवेदन)

उत्तर:

जवाब के लिए 3 № 1

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

आप देख सकते हैं कि अगर आप क्रोम कंसोल पर अपना रेगेक्स बनाते हैं तो क्या होगा:

new RegExp("978d{10}");
// => /978d{10}/

ध्यान दें कि कोई नहीं है d, केवल एक d, इसलिए आपका रेगेक्स मेल खाता है 978dddddddddd। वह है, शाब्दिक "d" चरित्र 10 बार दोहराया गया।

आपको उपयोग करने की ज़रूरत है \ शाब्दिक सम्मिलित करना स्ट्रिंग में आप "रेगेक्स का निर्माण कर रहे हैं:

var reg = new RegExp("978\d{10}");
var isbn = "9788740013498";
var res = isbn.match(reg);

console.log(res)

// => ["9788740013498", index: 0, input: "9788740013498"]

जवाब के लिए 2 № 2

यदि आप RegExp कंस्ट्रक्टर का उपयोग करते हैं तो आपको डबल बैक स्लैश से बचना होगा:

var reg = new RegExp("978\d{10}");

कोट फ़ॉर्म प्रलेखन:

कंस्ट्रक्टर फ़ंक्शन का उपयोग करते समय, सामान्य स्ट्रिंग एस्केप नियम (किसी स्ट्रिंग में शामिल होने पर विशेष वर्णों को पूर्ववर्ती करना) आवश्यक हैं। उदाहरण के लिए, निम्नलिखित समतुल्य हैं:

var re = /w+/;
var re = new RegExp("\w+");