Comment bien les caractères d'échappement dans regexp
Je veux faire une recherche de chaine à l'intérieur d'une chaîne. Disons simplement MySTR.search(Needle)
.
Le problème se produit lorsque cette needle
chaîne contient des regex personnages comme *,+ et ainsi de suite. Il échoue avec l'erreur invalid quantifier
.
J'ai parcouru le web et a trouvé que la chaîne peut être échappé avec \Q some string \E
.
Toutefois, cela ne signifie pas toujours de produire le comportement souhaité. Par exemple:
var sNeedle = '*Stars!*';
var sMySTR = 'The contents of this string have no importance';
sMySTR.search('\Q' + sNeedle + '\E');
Résultat est -1. OK.
var sNeedle = '**Stars!**';
var sMySTR = 'The contents of this string have no importance';
sMySTR.search('\Q' + sNeedle + '\E');
Résultat est non valide "quantificateur". Cela se produit parce que 2 ou plusieurs caractères spéciaux sont "toucher" les uns les autres, parce que:
var sNeedle = '*Dont touch me*Stars!*Dont touch me*';
var sMySTR = 'The contents of this string have no importance';
sMySTR.search('\Q' + sNeedle + '\E');
Travaillera OK.
Je sais que je pourrais faire une fonction escapeAllBadChars(sInStr)
et ajoutez simplement le double slash avant tout spécial regex caractère, mais je me demandais si il existe un moyen plus simple de le faire?
Je pense que les étoiles dans votre troisième exemple n'en font pas ce que vous en pensez. Ils ne sont pas être interprétées dans un sens littéral * les caractères, mais comme quantificateurs pour les caractères devant eux.
en Java, il fonctionne de la même comme en Perl (pas sûr d'autres langues).
OriginalL'auteur user1651105 | 2011-04-14
Vous devez vous connecter pour publier un commentaire.
\Q...\E
ne fonctionne pas en JavaScript (au moins, ils n'échappent pas à quoi que ce soit...) comme vous pouvez le voir:produit:
comme vous pouvez le voir sur Ideone.
La suite de caractères doivent être échappés:
(
)
[
{
*
+
.
$
^
\
|
?
Donc, quelque chose comme ceci:
Non,
]
et}
n'avez pas besoin d'être échappé: ils n'ont pas de signification particulière, seulement leur de l'ouverture de comptoir des pièces.Noter que lors de l'utilisation d'un littéral de l'expression rationnelle,
/.../
, vous avez également besoin d'échapper à la/
char. Cependant,/
n'est pas une regex méta-caractère: lors de l'utilisation dans unRegExp
objet, il n'a pas besoin d'une évasion.le caractère doit être échappé ainsi
Je ne dirais pas
/
de regex méta char. Il a seulement besoin de s'échapper lorsque vous utilisez un littéral de l'expression rationnelle. Lors de la création de la regex avec unRegExp
objet, il n'a pas besoin d'une évasion. Mais depuis que j'ai donner un exemple avec/.../
, c'est une bonne idée de le mentionner.OriginalL'auteur Bart Kiers
Je suis juste tremper mes pieds dans du Javascript, mais il y a une raison, vous avez besoin d'utiliser le moteur d'expressions régulières? Que diriez -
OriginalL'auteur Mark Peters
J'ai effectué une recherche rapide sur Google pour voir ce qu'il y a et il semble que vous avez un peu d'options pour échapper à l'expression régulière caractères. Selon une page, vous pouvez définir & exécuter une fonction comme ci-dessous pour échapper à la problématique des caractères:
Sinon, vous pouvez essayer et utiliser une bibliothèque comme XRegExp, qui prend en charge les nuances que vous essayez de re-régler.
OriginalL'auteur Taylor Gerring
Double de https://stackoverflow.com/a/6969486/151312
C'est bon comme par MDN (voir l'explication dans le post ci-dessus):
OriginalL'auteur CoolAJ86