Les expressions régulières en pratique

Une expression régulière décrit un ensemble de chaînes : \d{4}-\d{2}-\d{2} reconnaît les dates écrites 2025-03-14, \d{5} un code postal français. Les parenthèses créent des groupes de capture, que le remplacement peut réutiliser avec $1, $2 ou par leur nom si le groupe en a un.

Les drapeaux changent le comportement : g cherche toutes les correspondances au lieu de la première, i ignore la casse, m fait valoir ^ et $ à chaque ligne, s permet au point de correspondre aux sauts de ligne, u active les classes Unicode comme \p{L}. Sans g, le remplacement ne change que la première occurrence.

Certains motifs, comme (a+)+$ ou (\w+\s?)*$, essaient un nombre exponentiel de combinaisons sur un texte qui correspond presque, et peuvent bloquer un navigateur ou un serveur : c'est le ReDoS. Ici, le test tourne dans un processus séparé et s'arrête au bout d'une seconde : la page reste utilisable et te signale le problème.

Erreurs fréquentes

  • Oublier de doubler les barres obliques inverses quand la regex est dans une chaîne de code : ici on écrit \d, dans une chaîne JavaScript "\\d".
  • Utiliser .* là où il faut .*? : le quantificateur gourmand prend tout jusqu'à la dernière occurrence possible.
  • Imbriquer des quantificateurs comme (a+)+ ou (a|a)* : c'est la cause la plus fréquente de retour arrière catastrophique.

Questions fréquentes

Quel moteur d'expressions régulières est utilisé ?

Celui de JavaScript (ECMAScript) de ton navigateur. Il est très proche de PCRE, utilisé par PHP, mais certaines fonctions, comme les groupes atomiques et les quantificateurs possessifs, manquent.

Comment utiliser un groupe dans le remplacement ?

Avec $1, $2… pour les groupes numérotés, $ suivi du nom entre chevrons pour les groupes nommés et $& pour la correspondance entière. Un dollar littéral s'écrit $$.

Le texte saisi est-il envoyé quelque part ?

Non : tout se passe dans le navigateur. Motif et texte ne vont que dans l'adresse de la page, pour pouvoir la partager, et seulement s'ils sont courts.

Comment fonctionne ce calcul

Le motif est compilé avec new RegExp(motif, drapeaux) et appliqué avec String.prototype.matchAll, toujours avec le drapeau g ajouté pour parcourir le texte ; sans g dans la demande, seule la première correspondance est gardée. Le remplacement utilise String.prototype.replace avec les drapeaux choisis. L'exécution a lieu dans un Web Worker, arrêté s'il ne répond pas en 1 seconde ; au plus 1000 correspondances sont listées.