Değişkenle bitiştirilmiş JavaScript normal ifade kalıbı


94

Değişkenle bitiştirilmiş normal ifade kalıbı nasıl oluşturulur?

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

Teşekkürler

Yanıtlar:


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

\bbir dizede değişmez bir geri alma karakteridir. Bir dizge hazır bilgisine bir normal ifade koyarken, bir tur daha kaçışa ihtiyacınız vardır:

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

( //Bu bağlamda da ihtiyacınız yoktur .)


16
Yerleşik bir türün yapıcı işlevinin hem birlikte hem de kullanılmadan kullanılabileceği birçok yer vardır new. Bununla birlikte, bunun doğru olmayabileceği diğer nesnelerle tutarlılık ve genel olarak netlik için her zaman kullanırdım new.
bobince

1
Başka bir yol da netlik için tek tırnak işaretleri kullanmaktır, böylece ters eğik çizgilerden kaçmanıza gerek kalmaz:new RegExp('\b'+test+'\b');
IQAndreas

5
Yine de ters eğik çizgilerden kaçmanız gerekiyor. Tek tırnak işaretleri, JavaScript'te çift tırnak için farklı çıkış kurallarına sahip değildir (örneğin, PHP'nin aksine).
bobince

Bu yanıt aynı zamanda .match () ve .replace () JS normal ifade işlevleriyle bir değişkende border-operatörlerini kullanmaya çalışırken aynı soruyu çözer.
HoldOffHunger

Tam da aradığım şey. İle ilgili kısım When putting a regex in a string literal you need one more round of escaping; bunun (nedenleri) hakkında herhangi bir arka plan bilgisi var mı?
Bas Peeters


9

kullanabilirsiniz

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

ama kullanmayı öneririm

var list = '51,52,53';
function test2(list, test){
    return !((","+list+",").indexOf(","+test+",") === -1)
}
alert( test2(list,52) )
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.