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?

\Q...\E travaille en Perl, vous ne savez pas à propos de n'importe où ailleurs.
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