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.