Regex pour remplacer le texte en dehors des balises html
J'ai ce code HTML:
"This is simple html text <span class='simple'>simple simple text text</span> text"
J'ai besoin de correspondre uniquement les mots qui sont en dehors de toute balise HTML. Je veux dire, si je veux correspondre à la “simple” et “texte”, je devrais obtenir les résultats que “C'est simple texte html” et la dernière partie “texte”, le résultat sera “simple” 1 match, “texte” 2 matchs. Quelqu'un pourrait-il m'aider? Je suis à l'aide de jQuery.
var pattern = new RegExp("(\\b" + value + "\\b)", 'gi');
if (pattern.test(text)) {
text = text.replace(pattern, "<span class='notranslate'>$1</span>");
}
value
est le mot que je veux correspondance (dans ce cas “simple”)text
est"This is simple html text <span class='simple'>simple simple text text</span> text"
J'ai besoin d'envelopper tous les mots sélectionnés (dans cet exemple, c'est “simple”) avec <span>
. Mais je veux seulement d'envelopper les mots qui sont à l'extérieur de tout des balises HTML. Le résultat de cet exemple devrait être
This is <span class='notranslate'>simple</span> html <span class='notranslate'>text</span> <span class='simple'>simple simple text text</span> <span class='notranslate'>text</span>
Je ne veux pas remplacer tout le texte à l'intérieur
<span class='simple'>simple simple text text</span>
Il devrait être le même qu'avant le remplacement.
L'exemple a été ajouté.
OriginalL'auteur Sanya530 | 2013-09-04
Vous devez vous connecter pour publier un commentaire.
D'accord, essayez d'utiliser cette regex:
Exemple travaillé sur regex101.
Ventilation:
L'anticipation négatif, permettra d'éviter un match si
text
ousimple
est entre les balises html.Mais IE8...ne fonctionne pas 🙁
Peut-être essayer de s'échapper de la barre oblique
(text|simple)(?![^<]*>|[^<>]*<\/)
? Je ne sais pas sur quel moteur de IE roule sur, mais si c'est similaire à Javascript, cela devrait faire l'affaire.Désolé! C'était mon erreur en JS. Tout fonctionne PARFAIT dans IE8. Merci!!!!
Il m'a fallu deux jours pour comprendre cela. Je vous remercie beaucoup, monsieur!
OriginalL'auteur Jerry
Cependant c'est une très naïve expression. Il serait préférable d'utiliser un DOM parser.
OriginalL'auteur Explosion Pills