Quelqu'un pourrait-il donner une liste complète des caractères spéciaux à échapper?
Je crains de ne pas en connaître certains.
Jetez un coup d'œil à l'implémentation PHP.JS de la fonction preg_quote
de PHP, qui devrait suffire
Les caractères spéciaux des expressions régulières sont les suivants: . \ + * ? [ ^ ] $ ( ) { } = ! < > | : -
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 "
.
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_-]+
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 '.'
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, '\\$&')
}