8
votes

Comment utiliser des variables à l'intérieur d'une expression régulière dans JavaScript

Je veux construire une regex dans JavaScript qui correspond à un mot mais ne partie pas. Je pense que quelque chose comme \ Bword \ B fonctionne bien pour cela. Mon problème est que le mot n'est pas connu à l'avance, je voudrais donc assembler l'expression régulière à l'aide d'une variable qui maintient le mot à faire correspondre quelque chose dans le sens de:

r = "\b(" + word + ")\b";
reg = new RegExp(r, "g");
lexicon.replace(reg, "<span>$1</span>"


2 commentaires

Si vous pensez que \ BWARD \ B fonctionnera, pourquoi la créez-vous comme \ b (mot) \ b ?


Parce que je veux capturer le mot donné qui ne sera pas toujours "mot".


4 Réponses :


13
votes

\ est un caractère d'échappement dans des expressions régulières et dans les chaînes.

Puisque vous assemblez l'expression régulière des chaînes, vous devez échapper au \ s en eux. xxx

devrait faire le tour, bien que je ne l'ai pas testé.

Vous ne devez probablement pas utiliser Un global pour R (et probablement pas pour reg non plus).


1 commentaires

Merci pour la réponse, cela fonctionne comme prévu! Au fait, je n'utilise pas de globaux, qui n'étaient tout simplement qu'un code simulé pour la question. Merci encore!



3
votes

Vous n'échappez pas la barre oblique inverse. Donc, vous devriez avoir: xxx

En outre, vous devez échapper aux caractères spéciaux dans "Word", car vous ne savez pas si cela peut avoir des caractères spéciaux surgex.

espoir CA aide. Acclamations


1 commentaires

Votre réponse est également correcte mais j'ai vu l'autre première et cela a fonctionné, je l'ai heurté cependant. Merci!



0
votes

et n'écrivez pas les expressions dans la variable REGEXP, car elle ne fonctionne pas!

Exemple (ne fonctionne pas): P>

 var m = maxLength - 1;
 var r = "^\\w{0,"+ m +"}$";
 var reg = new RegExp(r, "g");


0 commentaires

0
votes

Utilisez cette

r = "(\\\b" +word+ "\\\b)" 


0 commentaires