Comment créer un motif regex qui est concaténé avec une variable, quelque chose comme ceci:
var test ="52";
var re = new RegExp("/\b"+test+"\b/");
alert('51,52,53'.match(re));
Merci
Réponses:
var re = new RegExp("/\b"+test+"\b/");
\b
dans une chaîne littérale est un caractère de retour arrière. Lorsque vous placez une expression régulière dans une chaîne littérale, vous avez besoin d'un autre cycle d'échappement:
var re = new RegExp("\\b"+test+"\\b");
(Vous n'avez pas non plus besoin du //
dans ce contexte.)
new RegExp('\b'+test+'\b');
When putting a regex in a string literal you need one more round of escaping
; y a-t-il des informations générales sur (les raisons de) cela?
Avec ES2015 (aka ES6), vous pouvez utiliser des littéraux de modèle lors de la construction de 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))
new
. Cependant, pour la cohérence avec d'autres objets où cela peut ne pas être vrai, et pour la clarté en général, j'utiliserais toujoursnew
.