Le trait d'union dans les ensembles des expressions régulières JavaScript
Le trait d'union est aussi un caractère spécial à l'intérieur de [ ]
(mais pas à l'extérieur). Si vous avez besoin du trait d'union lui-même
comme caractère - placez-le à un endroit où il ne sera pas interprété comme un séparateur
d'intervalle.
Pourquoi c'est important : vous pouvez créer un intervalle
de caractères sans vous en rendre compte. Par exemple,
comme ceci - '[:-@]' - vous pensez que vous
sélectionnez le deux-points, le trait d'union et l'arobase, alors
qu'en réalité, vous obtenez l'intervalle de caractères entre
: et @. Cet intervalle inclut
les caractères suivants : ? < = > : ;
D'où viennent-ils ? De la table ASCII - le deux-points a un numéro inférieur à celui de l'arobase - ce qui forme un intervalle. C'est-à-dire que tous les intervalles sont déterminés selon la table ASCII (on peut s'en servir si on le souhaite).
Comment y remédier : placez le trait d'union
à un endroit où il ne sera certainement pas interprété comme
un caractère d'intervalle, par exemple, au début ou à la fin
(c'est-à-dire après [ ou avant ]).
On peut aussi échapper le trait d'union - alors
il représentera lui-même, indépendamment de sa
position. Par exemple, au lieu de [:-@], écrire
[:\-@] - et il n'y aura plus d'intervalle, mais
trois caractères - le deux-points, le trait d'union et l'arobase
@.
Exemple
Dans l'exemple suivant, le motif de recherche est :
chiffre 1, puis lettre de 'a'
à 'z', puis chiffre 2 :
let str = '1a2 1-2 1c2 1z2';
let res = str.replace(/1[a-z]2/g, '!');
En conséquence, la variable contiendra :
'! 1-2 ! !'
Exemple
Échappons maintenant le trait d'union. En conséquence,
le motif de recherche est : chiffre 1, puis
lettre 'a', ou trait d'union, ou lettre 'z',
puis chiffre 2 :
let str = '1a2 1-2 1c2 1z2';
let res = str.replace(/1[a\-z]2/g, '!');
En conséquence, la variable contiendra :
'! ! 1c2 !'
Exemple
On peut simplement déplacer le trait d'union sans l'échapper :
let str = '1a2 1-2 1c2 1z2';
let res = str.replace(/1[az-]2/g, '!');
En conséquence, la variable contiendra :
'! ! 1c2 !'
Exemple
Dans l'exemple suivant, le motif de recherche est :
premier caractère - lettres minuscules ou
trait d'union '-', puis deux lettres 'x' :
let str = 'axx Axx -xx @xx';
let res = str.replace(/[a-z-]xx/g, '!');
En conséquence, la variable contiendra :
'! Axx ! @xx'
Exemple
Dans l'exemple suivant, le motif de recherche est :
premier caractère - lettres minuscules, lettres
majuscules ou trait d'union '-', puis deux lettres
'x' :
let str = 'axx Axx -xx @xx';
let res = str.replace(/[a-zA-Z-]xx/g, '!');
En conséquence, la variable contiendra :
'! ! ! @xx'
Exemple
On peut placer le trait d'union entre deux intervalles - là, il ne créera certainement pas un autre intervalle :
let str = 'axx 9xx -xx @xx';
let res = str.replace(/[a-z-0-9]xx/g, '!');
En conséquence, la variable contiendra :
'! ! ! @xx'
Problèmes pratiques
Soit la chaîne :
let str = 'xaz xBz xcz x-z x@z';
Trouvez toutes les chaînes selon le motif suivant :
lettre 'x', lettre majuscule ou minuscule
ou trait d'union, lettre 'z'.
Soit la chaîne :
let str = 'xaz x$z x-z xcz x+z x%z x*z';
Trouvez toutes les chaînes selon le motif suivant :
lettre 'x', puis soit le dollar, soit
le trait d'union, soit le plus, puis lettre 'z'.