Méthodes RegExp en JavaScript
Les expressions régulières en JavaScript permettent de rechercher, faire correspondre et manipuler des chaînes. Ce guide couvre les méthodes clés associées aux regex.
Les expressions régulières en JavaScript sont un moyen puissant de rechercher, faire correspondre et manipuler des chaînes. Ce guide couvre les méthodes essentielles que vous appelez sur une expression régulière (test, exec) et sur une string (search, split, match, matchAll, replace, replaceAll), avec un exemple exécutable et la forme réelle du résultat retourné pour chacune. Comprendre ces méthodes vous permet de gérer efficacement la correspondance de motifs dans votre code.
Rappel rapide sur les regex
Avant les méthodes, une orientation d'une minute pour les lecteurs qui découvrent les expressions régulières.
Un littéral regex s'écrit entre barres obliques, éventuellement suivi de drapeaux :
/pattern/flags // e.g. /hello/giVous pouvez également en créer une dynamiquement avec le constructeur RegExp, ce qui est utile lorsque le motif provient d'une variable (notez que les barres obliques inverses doivent être doublées dans une string) :
const word = "hello";
const regex = new RegExp(word, "gi"); // same as /hello/gi
const digits = new RegExp("\\d+"); // same as /\d+/Les drapeaux modifient le comportement de la correspondance :
| Drapeau | Nom | Effet |
|---|---|---|
g | global | Trouver toutes les correspondances au lieu de s'arrêter à la première. |
i | ignorer la casse | Rendre la correspondance insensible à la casse. |
m | multiligne | ^ et $ correspondent aux sauts de ligne, pas seulement aux extrémités de la string. |
s | dotAll | Permettre à . de correspondre également aux caractères de saut de ligne. |
u | unicode | Traiter le motif comme une séquence de points de code Unicode. |
y | sticky | Correspondre uniquement en commençant exactement à lastIndex. |
Pour la syntaxe complète des motifs et les détails des drapeaux, voir Motifs et drapeaux JavaScript et Groupes capturants. Plusieurs méthodes présentées ci-dessous sont également documentées du côté des strings dans Strings JavaScript.
RegExp.test()
La méthode test() teste une string pour vérifier si elle correspond à une expression régulière. Elle retourne true si une correspondance est trouvée, ou false dans le cas contraire.
Exemple
Dans cet exemple, la méthode test() vérifie si la string "Hello world!" contient le motif "hello". Étant donné que la méthode est sensible à la casse, elle retourne false. Ajoutez le drapeau i (/hello/i) et elle retournerait true.
RegExp.exec()
La méthode exec() recherche dans une string une correspondance avec une expression régulière. Elle retourne un array contenant le texte correspondant et les groupes capturants, ou null si aucune correspondance n'est trouvée. La valeur retournée n'est pas un array ordinaire : elle contient également index (la position de début de la correspondance), input (la string originale) et groups (les groupes capturants nommés, ou undefined s'il n'y en a pas).
Exemple
Ici, exec() trouve un ou plusieurs chiffres dans "The year is 2024." L'élément 0 est la correspondance complète, l'élément 1 est le premier groupe capturant (\d+), et les propriétés supplémentaires indiquent où la correspondance a été trouvée.
Le piège de lastIndex avec /g
Lorsque la regex possède le drapeau global (g) ou sticky (y), exec() devient stateful : chaque appel reprend depuis la propriété lastIndex de la regex et l'avance, retournant null une fois qu'il n'y a plus de correspondances. Appelez-la dans une boucle pour parcourir chaque correspondance — mais sachez que réutiliser la même regex /g pour des appels non liés peut donner des résultats surprenants car lastIndex est mémorisé.
Sans le drapeau g, exec() n'est pas stateful et retourne toujours la première correspondance, donc une boucle while comme celle-ci s'exécuterait à l'infini. Pour une utilisation non globale, préférez match() ou matchAll().
String.search()
La méthode search() teste une string pour vérifier si elle correspond à une expression régulière. Elle retourne l'index de base zéro de la première correspondance, ou -1 si aucune correspondance n'est trouvée.
Exemple
Dans cet exemple, la méthode search() retourne l'index de la première occurrence de "awesome" dans la string, qui est 14.
String.split()
La méthode split() divise une string en une liste ordonnée de sous-chaînes et les retourne dans un array. C'est une méthode polyvalente de string : le séparateur peut être une string simple (str.split(",")) ou une expression régulière. La forme regex n'est qu'un cas d'utilisation, pratique lorsque le délimiteur varie — par exemple, pour diviser sur un ou plusieurs caractères d'espacement.
Exemple
Le premier appel divise sur une virgule littérale ; le second utilise la regex /\s+/ pour diviser sur toute suite d'espaces, de sorte que plusieurs espaces et tabulations se regroupent en séparateurs propres.
String.match()
La méthode match() récupère le résultat de la correspondance d'une string avec une expression régulière. Sa valeur de retour dépend des drapeaux :
- Avec
/g: un array de toutes les sous-chaînes correspondantes (sansindexnigroups), ounulls'il n'y a pas de correspondances. - Sans
/g: le même array complet que retourneexec()— la première correspondance plus les groupes capturants, avecindex,inputetgroups— ounulls'il n'y a pas de correspondance.
Étant donné que match() retourne null plutôt qu'un array vide lorsqu'il n'y a pas de correspondance, vérifiez toujours le résultat avant de l'utiliser.
Exemple
Avec le drapeau global, match() retourne chaque occurrence de "ain" ; un motif qui ne correspond à rien retourne null, et non un array vide.
String.matchAll()
La méthode matchAll() retourne un itérateur de toutes les correspondances, y compris les groupes capturants. Chaque élément qu'elle produit est un array de correspondance complet (un RegExpMatchArray), de la même forme que celle produite par exec() — chaque correspondance porte donc index, input et groups, et pas seulement les chaînes correspondantes. L'expression régulière doit avoir le drapeau g, sinon matchAll() lève une TypeError. Contrairement à exec() dans une boucle, matchAll() ne laisse pas de lastIndex résiduel sur votre regex, ce qui en fait le choix le plus propre pour itérer sur chaque correspondance. (Nécessite ES2020+.)
Exemple
Comme les éléments sont de vrais arrays de correspondance, vous pouvez lire match.index et les groupes capturants (match[1], match[2], …) pour chaque résultat. Convertissez l'itérateur en array avec Array.from(str.matchAll(regex)) ou l'opérateur de décomposition lorsque vous avez besoin d'indexer les résultats.
String.replace()
La méthode replace() retourne une nouvelle string dont les correspondances du motif ont été remplacées (la string originale n'est jamais mutée). Avec une string simple ou une regex sans /g, elle ne remplace que la première correspondance ; ajoutez le drapeau g pour remplacer toutes les occurrences.
La string de remplacement prend en charge des jetons spéciaux : $& désigne la correspondance entière, $` et $' désignent le texte avant/après, $n insère le n-ième groupe capturant, et $<name> insère un groupe nommé.
Exemple
Vous pouvez également passer une fonction comme remplacement ; elle reçoit la correspondance et les groupes capturants en arguments et retourne le texte de remplacement, ce qui est pratique pour des valeurs calculées :
String.replaceAll()
La méthode replaceAll() remplace chaque occurrence et retourne une nouvelle string. Lorsque vous lui passez une expression régulière, celle-ci doit avoir le drapeau g, sinon elle lève une TypeError — cela protège contre l'erreur fréquente de s'attendre à ce que replace() soit global. Elle prend en charge les mêmes jetons de remplacement $1 / $<name> et les fonctions de remplacement que replace(). (Nécessite ES2021+.)
Exemple
Utilisez replaceAll() avec une string simple lorsque vous souhaitez simplement remplacer toutes les copies d'une sous-chaîne littérale ; optez pour la forme regex lorsque la cible est un motif.
Conclusion
Ce guide a couvert les méthodes principales utilisées avec les expressions régulières en JavaScript — test et exec du côté de la regex, et search, split, match, matchAll, replace et replaceAll du côté de la string — ainsi que leur forme réelle de retour et le comportement stateful de lastIndex avec le drapeau /g. Pour approfondir les motifs eux-mêmes, continuez avec Motifs et drapeaux, Groupes capturants et le drapeau sticky y.