3 votes

Comment ajouter dynamiquement un caractère d'échappement d'expression régulière en javascript ?

J'ai une ligne de code comme suit

if($('#eqInputBox').val().search( $(this).html() ) == -1)

qui est censé vérifier si le html est déjà dans la eqInputBox ou non - le problème est que, parfois, le caractère en $(this).html() peut être un '+' ou un '*' . Tout autre caractère (dans l'ensemble des caractères possibles pour l'application) fonctionne, mais lorsque ces caractères apparaissent, l'expression régulière ne renvoie aucune valeur - je pense que cela peut être dû au fait que je ne peux pas glisser un . \ pour échapper à ces caractères.

Quelqu'un a-t-il une idée de la façon dont, lorsque le caractère (ce) html est + o * je peux encore le faire vérifier normalement ?


EDIT :

$(this).html()

est généré par l'utilisateur div Je ne peux donc pas simplement insérer le caractère d'échappement manuellement. Comment faire pour l'ajouter dynamiquement lorsqu'il est nécessaire ?

2voto

Saeed Neamati Points 12178

La valeur de $(this).html() doit être un modèle d'expression régulière valide. En d'autres termes, au lieu d'avoir d* vous devez écrire \d* en elle.

Ainsi, vous devez échapper aux caractères de manière statique, lors de la création de la valeur de l'élément $(this).html() .

Mise à jour : Puisque la valeur de $(this).html() est généré par l'utilisateur, vous pouvez créer une fonction d'aide pour détecter les caractères d'expression régulière spéciaux et les échapper dans cette fonction.

function escapeCharacters(patter){
    // Here escape special characters. Eg. d* to \d*. However, it's difficulat
}

alors utilisez-le de cette façon :

if($('#eqInputBox').val().search( escapeCharacters($(this).html()) ) == -1)

2voto

M42 Points 31888

Vous devez simuler quotemeta Jetez un coup d'œil à Expression régulière d'échappement

RegExp.escape = function(text) {
    return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
}

1voto

eric.itzhak Points 5261

Docs MDN suggère une regex légèrement différente de celle que Toto a répondu :

function escapeRegExp(string) {
  return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X