चर के साथ जावास्क्रिप्ट रेगेक्स पैटर्न समरूप


93

रेगेक्स पैटर्न कैसे बनाएं जो कि परिवर्तनशील है, कुछ इस तरह है:

var test ="52";
var re = new RegExp("/\b"+test+"\b/"); 
alert('51,52,53'.match(re));

धन्यवाद

जवाबों:


149
var re = new RegExp("/\b"+test+"\b/"); 

\bएक स्ट्रिंग में शाब्दिक एक बैकस्पेस चरित्र है। एक स्ट्रिंग शाब्दिक में एक रेगेक्स डालते समय आपको भागने के एक और दौर की आवश्यकता होती है:

var re = new RegExp("\\b"+test+"\\b"); 

(आपको //इस संदर्भ में भी आवश्यकता नहीं है।)


16
ऐसे कई स्थान हैं जहां एक निर्मित प्रकार का निर्माता-कार्य दोनों के साथ या बिना उपयोग किया जा सकता है new। हालांकि, अन्य वस्तुओं के साथ संगतता के लिए जहां यह सही नहीं हो सकता है, और सामान्य रूप से स्पष्टता, मैं हमेशा उपयोग करूंगा new
बोबोंस

1
एक और तरीका स्पष्टता के लिए एकल-उद्धरण का उपयोग करना है ताकि आपको बैक-स्लैश से बचने की आवश्यकता न हो:new RegExp('\b'+test+'\b');
IQAndreas

5
आपको अभी भी बैकस्लैश से बचने की आवश्यकता है। एकल उद्धरणों के जावास्क्रिप्ट में डबल कोट्स के विपरीत अलग-अलग भागने के नियम नहीं हैं (इसके विपरीत, PHP)।
बॉबसन

यह उत्तर भी इसी प्रश्न को हल करता है जब .match () और .replace () JS regexing फ़ंक्शन के साथ एक चर पर सीमा-ऑपरेटरों का उपयोग करने का प्रयास किया जाता है।
होल्डऑफहंगर

मुझे इसकी ही खोज थी। के बारे में हिस्सा When putting a regex in a string literal you need one more round of escaping; क्या (इसके कारणों) के बारे में कोई पृष्ठभूमि जानकारी है?
बास पीटर्स

10

ES2015 (उर्फ ES6) के साथ आप RegExp का निर्माण करते समय टेम्पलेट शाब्दिक का उपयोग कर सकते हैं :

let test = '53'
const regexp = new RegExp(`\\b${test}\\b`, 'gi') // showing how to pass optional flags
console.log('51, 52, 53, 54'.match(regexp))


3
टाइपो: Regexp होना चाहिए RegExp
NFpeter

9

आप उपयोग कर सकते हैं

/(^|,)52(,|$)/.test('51,52,53')

लेकिन मैं उपयोग करने का सुझाव देता हूं

var list = '51,52,53';
function test2(list, test){
    return !((","+list+",").indexOf(","+test+",") === -1)
}
alert( test2(list,52) )
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.