⊗jsSpREESCh 99 of 294 menu

Échappement des caractères spéciaux dans les regex JavaScript

Supposons que nous voulions qu'un caractère spécial désigne lui-même. Pour cela, il faut l'échapper avec un backslash. Regardons des exemples.

Exemple

Dans l'exemple suivant, l'auteur de l'expression régulière voulait que le motif de recherche soit : lettre 'a', puis un plus '+', puis lettre 'x'. Cependant, l'auteur du code n'a pas échappé le symbole '+' et donc le motif de recherche est en réalité : lettre 'a' une ou plusieurs fois, puis lettre 'x' :

let str = 'a+x ax aax aaax'; let res = str.replace(/a+x/g, '!');

En conséquence, la variable contiendra :

'a+x ! ! !'

Exemple

Maintenant, l'auteur a échappé le plus avec un backslash. Maintenant le motif de recherche est comme voulu : lettre 'a', puis plus '+', puis lettre 'x'.

let str = 'a+x ax aax aaax'; let res = str.replace(/a\+x/g, '!');

En conséquence, la variable contiendra :

'! ax aax aaax'

Exemple

Dans cet exemple, le motif est : lettre 'a', puis point '.', puis lettre 'x' :

let str = 'a.x abx azx'; let res = str.replace(/a\.x/g, '!');

En conséquence, la variable contiendra :

'! abx azx'

Exemple

Dans l'exemple suivant, l'auteur a oublié d'échapper le point et toutes les sous-chaînes ont été capturées par la regex, car un point non échappé désigne n'importe quel caractère :

let str = 'a.x abx azx'; let res = str.replace(/a.x/g, '!');

En conséquence, la variable contiendra :

'! ! !'

Remarque

Notez que si vous oubliez le backslash pour le point (quand il doit désigner lui-même) - on peut même ne pas le remarquer :

'a.x'.replace(/a.x/g, '!'); // renvoie '!', comme nous le voulions

Visuellement, cela fonctionne correctement (car le point désigne n'importe quel caractère, y compris un point normal '.'). Mais si on change la chaîne dans laquelle les remplacements ont lieu - nous verrons notre erreur :

'a.x abx azx'.replace(/a.x/g, '!'); // renvoie '! ! !', mais on attendait '! abx azx'

Liste des caractères spéciaux et ordinaires

Si on échappe un caractère ordinaire - rien de grave n'arrive - il désignera toujours lui-même. Exception - les chiffres, on ne peut pas les échapper.

On doute souvent si un caractère donné est spécial. Certains en viennent à échapper tous les caractères suspects les uns après les autres. Cependant, c'est une mauvaise pratique (encombre l'expression régulière de backslashes).

Les caractères spéciaux sont : $ ^ . * + ? \ / {} [] () |

Ne sont pas des caractères spéciaux : @ : , ' " ; - _ = < > % # ~ `& !

Problèmes pratiques

Soit la chaîne :

let str = 'a.a aba aea';

Écrivez une expression régulière qui trouvera la chaîne 'a.a', sans capturer les autres.

Soit la chaîne :

let str = '2+3 223 2223';

Écrivez une expression régulière qui trouvera la chaîne '2+3', sans capturer les autres.

Soit la chaîne :

let str = '23 2+3 2++3 2+++3 345 567';

Écrivez une expression régulière qui trouvera les chaînes '2+3', '2++3', '2+++3', sans capturer les autres (+ peut être n'importe quel nombre).

Soit la chaîne :

let str = '23 2+3 2++3 2+++3 445 677';

Écrivez une expression régulière qui trouvera les chaînes '23', '2+3', '2++3', '2+++3', sans capturer les autres.

Soit la chaîne :

let str = '*+ *q+ *qq+ *qqq+ *qqq qqq+';

Écrivez une expression régulière qui trouvera les chaînes '*q+', '*qq+', '*qqq+', sans capturer les autres.

Soit la chaîne :

let str = '[abc] {abc} abc (abc) [abc]';

Écrivez une expression régulière qui trouvera les chaînes entre crochets et les remplacera par '!'.

Français
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Nous utilisons des cookies pour le fonctionnement du site, l'analyse et la personnalisation. Le traitement des données est effectué conformément à la Politique de confidentialité.
accepter tout personnaliser refuser