regex

2010-01-27 20 views
7

का उपयोग कर गतिशील स्ट्रिंग से मिलान करें मैं स्ट्रिंग के भीतर एक स्ट्रिंग की घटना का पता लगाने की कोशिश कर रहा हूं। लेकिन नीचे दिया गया कोड हमेशा "शून्य" देता है। जाहिर है कि कुछ गलत हो गया, लेकिन जब से मैं एक नौसिखिया हूँ, मैं इसे खोज नहीं सकता। मैं उम्मीद कर रहा हूँ कि कोड लौटाता है "सही" "अशक्त"regex

var searchStr = 'width'; 
var strRegExPattern = '/'+searchStr+'\b/'; 
"32:width: 900px;".match(new RegExp(strRegExPattern,'g')); 

उत्तर

17

कृपया डाल नहीं के बजाय '/' जब आप रेगुलर एक्सप्रेशन विकल्प

में स्ट्रिंग पारित ठीक होगा बाद

var strRegExPattern = '\\b'+searchStr+'\\b'; 
"32:width: 900px;".match(new RegExp(strRegExPattern,'g')); 
+0

अभी भी एक ही परिणाम मार्क। http://cld.ly/b616ma –

+0

क्या आप केवल \\ b' भाग के बिना searchStr के साथ प्रयास कर सकते हैं? आपकी स्ट्रिंग के बिना काम करना चाहिए। – YOU

+0

@Fares, आपको '' \\ b'' '2' \ 'के साथ' '\ b''' की आवश्यकता है। – kennytm

0

ध्यान दें कि '\\ b' एक स्ट्रिंग में एक स्लैश है जिसके बाद अक्षर 'बी', '\ b' भागने वाला कोड \b है, जो अस्तित्व में नहीं है, और 'बी' में गिर जाता है।

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

var string = 'width'; 
var quotemeta_string = string.replace(/[^$\[\]+*?.(){}\\|]/g, '\\$1'); // escape meta chars 
var pattern = quotemeta_string + '\\b'; 
var re = new RegExp(pattern); 
var bool_match = re.test(input); // just test whether matches 
var list_matches = input.match(re); // get captured results 
4

इस काम के लिए सही उपकरण regex नहीं है, लेकिन String.indexOf:

var str = '32:width: 900px;', 
    search = 'width', 
    isInString = !(str.indexOf(search) == -1); 

// isInString will be a boolean. true in this case 

प्रलेखन: https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/String/indexOf

+0

+1 का उपयोग करके आकर्षण की तरह काम करता है। –

3

आप जावास्क्रिप्ट में regexes बनाने के दो तरीके अप मिश्रण कर रहे हैं। आप एक regex शाब्दिक उपयोग करते हैं, / regex सीमांकक, g संशोधक को क्लोज़िंग सीमांकक इस प्रकार है, और \b एक शब्द सीमा के लिए भागने अनुक्रम है: आप एक स्ट्रिंग के रूप में यह बनाते हैं

var regex = /width\b/g; 

RegExp निर्माता के लिए शाब्दिक, आप regex सीमांकक को बंद रखना होगा, तो आप एक दूसरी स्ट्रिंग तर्क के रूप में संशोधक गुजरती हैं, और आप रेगुलर एक्सप्रेशन से बच दृश्यों के बैकस्लैश दोगुना करने के लिए है:

var regex = new RegExp('width\\b', 'g'); 

जिस तरह से आप कर रहे हैं यह, \b को बैकस्पेस में परिवर्तित किया जा रहा है रेगेक्स कंपाइलर तक पहुंचने से पहले चरित्र; आपको पिछली जावास्क्रिप्ट की स्ट्रिंग-शाब्दिक एस्केप-अनुक्रम प्रोसेसिंग प्राप्त करने के लिए बैकस्लैश से बचना होगा। या एक regex शाब्दिक का उपयोग करें।