Pola regex JavaScript digabungkan dengan variabel

94

Cara membuat pola regex yang digabungkan dengan variabel, kira-kira seperti ini:

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

Terima kasih

Komang
sumber

Jawaban:

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

\bdalam string literal adalah karakter spasi mundur. Saat meletakkan regex dalam string literal, Anda membutuhkan satu putaran lagi untuk keluar:

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

(Anda juga tidak membutuhkan //dalam konteks ini.)

bobince
sumber
16
Ada banyak tempat di mana fungsi konstruktor dari tipe built-in dapat digunakan baik dengan atau tanpa new. Namun, untuk konsistensi dengan objek lain di mana hal ini mungkin tidak berlaku, dan kejelasan secara umum, saya akan selalu menggunakan new.
bobince
1
Cara lain adalah dengan menggunakan tanda kutip tunggal untuk kejelasan sehingga Anda tidak perlu keluar dari garis miring ke belakang:new RegExp('\b'+test+'\b');
IQAndreas
5
Anda masih harus menghindari garis miring terbalik. Tanda kutip tunggal tidak memiliki aturan pelolosan yang berbeda untuk tanda kutip ganda dalam JavaScript (tidak seperti, katakanlah, PHP).
bobince
Jawaban ini juga memecahkan pertanyaan yang sama saat mencoba menggunakan operator perbatasan pada variabel dengan fungsi regexing JS .match () dan .replace ().
HoldOffHunger
Hanya apa yang saya cari. Bagian tentang When putting a regex in a string literal you need one more round of escaping; apakah ada informasi latar belakang tentang (alasan) ini?
Bas Peeters
10

Dengan ES2015 (alias ES6) Anda dapat menggunakan literal template saat membuat 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))

Tapirboy
sumber
3
salah ketik: Ekspresi Reguler harus RegExp
NFpeter
9

kamu bisa memakai

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

tetapi saya menyarankan untuk menggunakan

var list = '51,52,53';
function test2(list, test){
    return !((","+list+",").indexOf(","+test+",") === -1)
}
alert( test2(list,52) )
Lauri
sumber