Nous avons vu précédemment que la syntaxe des regex est définie par un certain nombre de caractères spéciaux, comme ^, $, [ et ], ou encore + et *. Ces caractères sont ce que l'on appelle des métacaractères, et en voici la liste complète :
! ^ $ ( ) [ ] { } ? + * . / \ |
Un problème se pose si on veut chercher la présence d'une accolade dans une chaîne de caractères. En effet, si on a ceci, la regex ne fonctionnera pas :
Chaîne |
Regex |
Résultat |
Une accolade {comme ceci} |
/accolade {comme ceci}/ |
false |
C'est normal, car les accolades sont des métacaractères qui définissent un nombre de répétition : en clair, cette regex n'a aucun sens pour l'interpréteur Javascript ! Pour pallier ce problème, il suffit d'échapper les accolades au moyen d'un anti-slash :
/accolade \{comme ceci\}/ |
De cette manière, les accolades seront vues par l'interpréteur comme étant des accolades « dans le texte », et non comme des métacaractères. Il en va de même pour tous les métacaractères cités précédemment. Il faut même penser à échapper l'anti-slash avec… un anti-slash :
Chaîne |
Regex |
Résultat |
Un slash / et un anti-slash \ |
// et un anti-slash \/ |
erreur de syntaxe |
Un slash / et un anti-slash \ |
/\/ et un anti-slash \\/ |
true |
Ici, pour pouvoir trouver le / et le \, il convient également de les échapper.
Il est à noter que si le logiciel que vous utilisez pour rédiger en Javascript fait bien son job, la première regex provoquera une mise en commentaire (à cause des deux / au début) : c'est un bon indicateur pour dire qu'il y a un problème. Si votre logiciel détecte aussi les erreurs de syntaxe, il peut vous être d'une aide précieuse.
Au sein d'une classe de caractères, il n'y a pas besoin d'échapper les métacaractères, à l'exception des crochets (qui délimitent le début et la fin d'une classe), du tiret (qui est utilisé pour définir un intervalle) et de l'anti-slash (qui sert à échapper).
Concernant le tiret, il existe une petite exception : il n'a pas besoin d'être échappé s'il est placé en début ou en fin de classe.
Ainsi, si on veut rechercher un caractère de a à z ou les métacaractères ! et ?, il faudra écrire ceci :
/[a-z!?]/ |
Et s'il faut trouver un slash ou un anti-slash, il ne faut pas oublier de les échapper :
/[a-z!?\/\\]/ |
Créé avec HelpNDoc Personal Edition: Générateur d'aides CHM gratuit