Je veux ajouter une balise (variable) aux valeurs avec regex, le modèle fonctionne bien avec PHP mais j'ai du mal à l'implémenter dans JavaScript.
Le modèle est ( value
est la variable):
/(?!(?:[^<]+>|[^>]+<\/a>))\b(value)\b/is
J'ai échappé aux contre-obliques:
var str = $("#div").html();
var regex = "/(?!(?:[^<]+>|[^>]+<\\/a>))\\b(" + value + ")\\b/is";
$("#div").html(str.replace(regex, "<a href='#" + value +">" + value + "</a>"));
Mais cela ne semble pas être correct, j'ai enregistré le modèle et c'est exactement ce qu'il devrait être. Des idées?
javascript
regex
string
Borstenhorst
la source
la source
value
une variable?Réponses:
Pour créer l'expression régulière à partir d'une chaîne, vous devez utiliser l'
RegExp
objet JavaScript .Si vous souhaitez également faire correspondre / remplacer plusieurs fois, vous devez ajouter l'
g
indicateur (correspondance globale) . Voici un exemple:Démo de JSFiddle ici.
Dans le cas général, échappez à la chaîne avant de l'utiliser comme regex:
Cependant, toutes les chaînes ne sont pas des expressions régulières valides: il existe des caractères spécifiques, comme
(
ou[
. Pour contourner ce problème, échappez simplement la chaîne avant de la transformer en regex. Une fonction utilitaire pour cela va dans l'exemple ci-dessous:Démo de JSFiddle ici.
Remarque: l'expression régulière dans la question utilise le
s
modificateur, qui n'existait pas au moment de la question, mais qui existe - un indicateur / modificateurs
( dotall ) en JavaScript - aujourd'hui .la source
s
modificateur, voir à nouveau le lien MDN dans la note de réponse.Si vous essayez d'utiliser une valeur de variable dans l'expression, vous devez utiliser le "constructeur" RegExp.
la source
Vous n'avez pas besoin de
"
pour définir une expression régulière, donc simplement:Si
value
est une variable et que vous voulez une expression régulière dynamique, vous ne pouvez pas utiliser cette notation; utilisez la notation alternative.String.replace
accepte également les chaînes en entrée, vous pouvez donc faire"fox".replace("fox", "bear");
Alternative:
Gardez à l'esprit que if
value
contient des caractères d'expressions régulières comme(
,[
et?
vous devrez les échapper.la source
J'ai trouvé ce fil utile - j'ai donc pensé ajouter la réponse à mon propre problème.
Je voulais éditer un fichier de configuration de base de données (datastax cassandra) à partir d'une application de nœud en javascript et pour l'un des paramètres du fichier dont j'avais besoin pour correspondre sur une chaîne, puis remplacer la ligne qui le suit.
C'était ma solution.
Après l'exécution, le paramètre du répertoire de données existant sera remplacé par le nouveau:
fichier de configuration avant:
fichier de configuration après:
la source
J'ai trouvé que je devais doubler le \ b pour le faire fonctionner. Par exemple, pour supprimer les mots "1x" d'une chaîne à l'aide d'une variable, j'avais besoin d'utiliser:
la source
Méthode beaucoup plus simple: utilisez des littéraux de modèle.
la source
https://jsfiddle.net/9f0mb6Lz/
J'espère que cela t'aides
la source