RegExp en JavaScript : décrire un motif pour le retrouver dans du texte

Une RegExp décrit un motif de texte : les deux écritures, test, match et replace, les drapeaux, les groupes nommés et le piège de lastIndex avec g.
3 min de lecture
Believemy logo

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.

JAVASCRIPT
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"));   // true

La 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.

DrapeauCe qu'il change
gCherche toutes les occurrences, pas la première seule
iIgnore la casse
m^ et $ valent pour chaque ligne
sLe point accepte aussi les retours à la ligne
uLe 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.

JAVASCRIPT
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.

Attention

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

Question

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.

Question

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.

Question

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.

Termes connexes

Découvrez notre glossaire JavaScript

Tous les mots de JavaScript expliqués simplement : mots-clés, objets natifs, méthodes, erreurs et concepts. Définitions claires et exemples qui tournent, pour apprendre et pour se dépanner.

Partager cet article

Tu veux nous aider ? Fais un lien vers cet article sur tes réseaux ou encore mieux : sur ton site, dans un article ou dans ta newsletter.