82 votes

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

Est-ce que quelqu'un pourrait donner une liste complète des caractères spéciaux qui doivent être échappés?

Je crains de ne pas tous les connaître.

12 votes

Cette liste était étonnamment difficile à trouver.

1voto

haravares Points 29

Le problème :

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

Solutions intelligentes :

// avec babel-polyfill
// Avertissement : sera retiré de 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, '\\$&')
}

0voto

Michael S Points 421

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

Dans cette problème github pour ESLint, à peu près à mi-chemin, l'utilisateur not-an-aardvark explique pourquoi le caractère mentionné dans le problème devrait peut-être être échappé.

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

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

La réponse au problème github que j'ai mentionné ci-dessus inclut une explication sur les "semantiques de l'Annexe B" (dont je ne sais pas grand chose) qui permet à 4 des caractères mentionnés ci-dessus d'être NON échappés : ) ] { }.

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X