Valider un code postal, extraire les montants d'une facture, remplacer toutes les dates d'un document : trois besoins qui reviennent sans arrêt, et qu'aucune méthode de chaîne ne couvre à elle seule.
Une expression régulière décrit un motif plutôt qu'un texte précis, et c'est le moteur qui se charge de le retrouver.
Définition
Une RegExp est un objet qui décrit un motif de caractères. Elle s'écrit entre deux barres obliques, ou avec le constructeur quand le motif se compose à l'exécution.
const codePostal = /^\d{5}$/;
console.log(codePostal.test("75011")); // true
console.log(codePostal.test("7501")); // false
const saisie = "believemy";
const dynamique = new RegExp("^" + saisie + "$", "i");
console.log(dynamique.test("Believemy")); // trueLa forme littérale est à préférer partout où le motif est connu d'avance : elle se lit mieux et évite le double échappement qu'impose la String (chaîne de caractères) passée au constructeur.
Les drapeaux
Les lettres placées après la barre fermante changent le comportement du moteur. Elles se cumulent.
| Drapeau | Ce qu'il change |
|---|---|
g | Cherche toutes les occurrences, pas la première seule |
i | Ignore la casse |
m | ^ et $ valent pour chaque ligne |
s | Le point accepte aussi les retours à la ligne |
u | Le motif est lu en points de code Unicode |
Chercher, extraire, remplacer
Trois méthodes couvrent presque tous les cas. test rend un booléen, match rend un tableau de résultats ou null, replace rend une nouvelle chaîne.
const dateFr = /(?<jour>\d{2})\/(?<mois>\d{2})\/(?<annee>\d{4})/;
const trouve = "livré le 04/07/2026".match(dateFr);
console.log(trouve.groups.annee); // "2026"
console.log("livré le 04/07/2026".replace(dateFr, "$<annee>-$<mois>-$<jour>"));
// "livré le 2026-07-04"
for (const m of "TVA 20 %, remise 15 %".matchAll(/(\d+) %/g)) {
console.log(m[1]); // "20" puis "15"
}Les groupes nommés, écrits entre chevrons juste après la parenthèse ouvrante, valent bien mieux que les numéros : ils se lisent dans le motif comme dans le remplacement, et l'ajout d'une parenthèse ne décale plus rien.
Un motif portant g retient où il s'est arrêté, dans sa propriété lastIndex. Réutilisé pour un test, il alterne donc true et false sur le même texte. La règle : pas de g sur un motif servant à tester.
Questions fréquentes
Pourquoi une expression régulière est-elle parfois très lente ?
Parce que certains motifs obligent le moteur à essayer un nombre exponentiel de découpages, en général quand un quantificateur en contient un autre. Sur une chaîne de trente caractères, la recherche peut alors durer des secondes. Simplifiez le motif plutôt que d'accuser la machine.
Peut-on valider une adresse e-mail avec un motif ?
Pas sérieusement. La spécification autorise des formes que les motifs courts refusent, et refuse des formes qu'ils acceptent. Un contrôle large, la présence d'un arobase et d'un point ensuite, suivi d'un message de confirmation, valide bien mieux qu'un motif de trois lignes.
Faut-il échapper les caractères venus d'une saisie ?
Toujours, dès que la valeur entre dans un new RegExp. Un point, un plus ou une parenthèse y prennent leur sens de motif et changent le résultat, voire le rendent très coûteux. Passez la valeur dans une fonction d'échappement avant de la coller au motif.