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

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.)


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))


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) )
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.