2010-01-27 22 views
7

Dizede bir dizenin varlığını algılamaya çalışıyorum. Ancak aşağıdaki kod her zaman "boş" değerini döndürür. Açıkçası, bir şeyler ters gitti, ama ben bir acemi olduğumdan, onu göremiyorum. Ben kodu yerine "boş"Regex kullanarak dinamik dizgi eşleme

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

cevap

17

koymayınız "doğru" döndüren bekliyorum '/' Eğer iyi olurdu takiben RegExp seçeneği

dizeyi geçerken

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

hala aynı sonuç Mark. http://cld.ly/b616ma –

+0

searchStr ile sadece "\\ b" parçası olmadan deneyebilir misiniz? senin dizenin bu olmadan çalışması gerekiyordu. – YOU

+0

@Fares, '' \\ b '' 2 '\' lerle, '' b '' ile değil. – kennytm

0

'\\ b', 'b' harfi ile takip edilen bir dizgede tek bir eğik çizgi olduğuna dikkat edin, '\ b', yok olan \b çıkış kodudur ve 'b' olarak daraltılır.

Ayrıca, yalnızca onların değişmez değerlerini eşleştirmeyi düşündüğünüzde, dizedeki metakarakterlerden kaçmayı düşünün.

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 
3

Sen JavaScript Regexes yaratmanın iki yolu yukarı karıştırma ediyoruz. Eğer değişmez bir regex kullanırsanız, /g değiştirici hemen kapanış sınırlayıcı izler, regex sınırlayıcı olduğunu ve \b bir kelime sınırından çıkış sırası ise: Eğer bir dize biçiminde bunu oluşturursanız

var regex = /width\b/g; 

RegExp yapıcısı için değişmez, size ikinci bir dize argümanı şeklinde düzenleyiciler geçmesi, regex ayraçları kapalı bırakın ve düzenli ifade kaçış dizileri içinde ters eğik çizgi çift var:

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

yaptığınızı yolu Bu, \b bir geri boşluğa dönüştürülüyor regex derleyicisine ulaşmadan önce karakter; JavaScript'in string-literal kaçış dizisi işlemesini geçmesi için ters eğik çizgi kaçmak zorunda. Ya da bir regex literal kullanın.