web-dev-qa-db-fra.com

Liste de tous les caractères qui doivent être échappés avant d'être insérés dans RegEx?

Quelqu'un pourrait-il donner une liste complète des caractères spéciaux à échapper?

Je crains de ne pas en connaître certains.

60
Somebody

Jetez un coup d'œil à l'implémentation PHP.JS de la fonction preg_quote de PHP, qui devrait suffire

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

Les caractères spéciaux des expressions régulières sont les suivants: . \ + * ? [ ^ ] $ ( ) { } = ! < > | : -

63
Tatu Ulmanen

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

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

De plus, vous devez échapper les caractères interprétés par l'interpréteur Javascript comme étant l'extrémité de la chaîne, soit ' ou ".

9
Andrea

Le trait d'union (-) doit être échappé entre crochets et s'il n'est pas positionné au début ou à la fin. Besoin de s'échapper - pour 

[a-z0-9\-_]+

Pas besoin de s'échapper - pour 

[a-z0-9_-]+
4
jj2005

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 inversé les positions de '\' et '.'

3
hngr18

Le problème:

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

Solutions intelligentes:

// with babel-polyfill
// Warning: will be removed from babel-polyfill v7
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
haravares