Liste de tous les caractères qui devraient être échappés avant d'être mis dans RegEx?

Quelqu'un pourrait-il donner une liste complète des caractères spéciaux qui devraient être échappés?

J'ai peur de ne pas en connaître certains.

58
demandé sur Danny Beckett 2011-02-24 16:13:55

6 réponses

Jetez un oeil à PHP.L'implémentation de JS de la fonction preg_quote de PHP, qui devrait faire ce dont vous avez besoin:

Http://phpjs.org/functions/preg_quote:491

Les caractères spéciaux de l'expression régulière sont: . \ + * ? [ ^ ] $ ( ) { } = ! < > | : -

62
répondu Tatu Ulmanen 2011-02-24 13:19:39

Selon ce site, la liste des caractères à échapper à

[, la barre oblique inverse \, le caret^, le signe dollar$, le point ou la période ., la barre verticale ou le symbole de tuyau|, le point d'interrogation ?, l'astérisque ou l'étoile*, le signe plus+, le support rond d'ouverture ( et le support rond de fermeture).

En plus de cela, vous devez échapper les caractères qui sont interprétés par L'interpréteur Javascript comme fin de la chaîne, c'est-à-dire ' ou ".

9
répondu Andrea 2011-02-24 13:23:46

Le Trait d'Union ( - ) doit être échappé lorsqu'il est entre crochets et qu'il n'est pas positionné au début ou à la fin par exemple Besoin d'échapper-pour

[a-z0-9\-_]+

Pas besoin de s'échapper - pour

[a-z0-9_-]+
4
répondu jj2005 2016-05-25 15:55:33

Basé sur la réponse de Tatu Ulmanen, ma solution en C # a pris cette forme:

private static List<string> RegexSpecialCharacters = new List<string>
{
    "\\",
    ".",
    "+",
    "*",
    "?",
    "[",
    "^",
    "]",
    "$",
    "(",
    ")",
    "{",
    "}",
    "=",
    "!",
    "<",
    ">",
    "|",
    ":",
    "-"
};


foreach (var rgxSpecialChar in RegexSpecialCharacters)
                rgxPattern = input.Replace(rgxSpecialChar, "\\" + rgxSpecialChar);

Notez que j'ai changé les positions de ' \ ' et '.', l'échec à traiter les barres obliques première conduira à doubler de la " de

3
répondu hngr18 2017-07-26 11:16:30

Je cherchais cette liste en ce qui concerne le paramètre "no-useless-escape" d'ESLint pour reg-ex. Et trouvé certains de ces caractères mentionnés n'ont pas besoin d'être échappés pour une expression régulière dans JS. La liste la plus longue dans l'autre réponse ici est pour PHP, ce qui nécessite que les caractères supplémentaires soient échappés.

Dans ce problème github pour ESLint, à mi-chemin, user not-an-aardvark explique pourquoi le caractère référencé dans le problème est un caractère qui devrait peut-être être échapper.

En javascript, un caractère qui doit être échappé est un caractère de syntaxe , ou l'un de ceux-ci:

^ $ \ . * + ? ( ) [ ] { } |

La réponse au problème github auquel j'ai lié ci-dessus inclut une explication de la sémantique "Annexe B" (Que Je ne connais pas beaucoup) qui permet à 4 des caractères mentionnés ci-dessus d'être échappés: ) ] { }.

Une autre chose à noter est que l'échappement d'un personnage qui ne nécessite pas d'échapper ne fera aucun mal (sauf peut-être si vous essayez de échapper le caractère d'échappement). Donc, ma règle de base personnelle est: "en cas de doute, échapper"

0
répondu Michael S 2017-12-15 18:45:14

Le problème:

const character = '+'
new RegExp(character, 'gi') // error

Solutions intelligentes:

// ES2016
const character = '+'
const escapeCharacter = RegExp.escape(character)
new RegExp(escapeCharacter, 'gi') // /\+/gi

// ES5
const character = '+'
const escapeCharacter = escapeRegExp(character)
new RegExp(escapeCharacter, 'gi') // /\+/gi

function escapeRegExp(string){
    return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')
}
0
répondu haravares 2018-08-21 14:03:33