Testeur de regex

Écrivez une expression régulière, collez un texte de test et voyez les correspondances surlignées en direct — avec groupes de capture, indicateurs et messages d'erreur clairs.

1 044 vues

Comment ça fonctionne

Une expression régulière décrit un motif de caractères plutôt qu'une chaîne littérale, ce qui permet à une courte expression de correspondre à toute une famille de textes : n'importe quelle adresse e-mail, n'importe quel numéro de téléphone dans plusieurs formats, n'importe quelle ligne d'un fichier journal commençant par « ERROR ». Saisissez une expression régulière JavaScript, activez ses indicateurs (g toutes les correspondances, i insensible à la casse, m ancres multilignes, s le point correspond aussi aux sauts de ligne, u Unicode complet) et collez un texte d'exemple : chaque correspondance est surlignée sur place et listée en dessous avec sa position et ses éventuels groupes de capture. Les parenthèses () créent un groupe de capture — un moyen d'extraire un fragment précis du texte correspondant, comme le domaine d'une adresse e-mail ou l'année d'une date, plutôt que de simplement savoir qu'une correspondance a eu lieu.

Une distinction déroute presque tout le monde au début : quantificateurs gourmands (greedy) contre paresseux (lazy). .* est gourmand — il tente de faire correspondre le plus de texte possible, puis ne recule (backtrack) que si nécessaire. Face à l'entrée <b>bold</b> and <i>italic</i>, le motif <.*> correspond avidement depuis le premier < jusqu'au tout dernier >, engloutissant les deux balises. Ajouter un ? pour obtenir .*? le rend paresseux — il correspond au minimum possible, si bien que <.*?> s'arrête au premier > et ne correspond correctement qu'à <b>. Cette distinction explique exactement pourquoi les regex naïves de correspondance HTML échouent sur du balisage réel.

Ce qu'il faut savoir

Le moteur utilisé ici est l'implémentation native JavaScript (ECMAScript) de votre propre navigateur, donc un motif qui correspond ici correspond à l'identique dans votre code JS — il n'y a aucune couche de traduction à remettre en question. Les autres variantes de regex — PCRE (PHP), le module re de Python, Pattern de Java — partagent l'essentiel de la syntaxe de base (classes de caractères, quantificateurs, groupes) mais divergent sur les fonctionnalités avancées : le support du lookbehind, la syntaxe des groupes nommés, les quantificateurs possessifs et certaines séquences d'échappement diffèrent. Retestez toujours les cas limites dans le langage cible réel avant de mettre en production.

Méfiez-vous du retour arrière catastrophique (catastrophic backtracking) : des motifs avec des quantificateurs imbriqués ou qui se chevauchent, comme (a+)+b testé contre une longue chaîne de « a » sans « b » final, peuvent forcer le moteur dans un retour arrière exponentiel et figer la page — ou votre serveur de production, pour la même raison. Si un motif se bloque ici, raccourcissez d'abord le texte de test, puis restructurez le motif (souvent en supprimant entièrement la répétition imbriquée) plutôt que de simplement lui jeter plus de puissance de calcul. Tout s'exécute localement dans votre navigateur ; aucun motif ni texte n'est jamais transmis.

Questions fréquentes

Quelle variante de regex est utilisée ?

JavaScript (ECMAScript) — le moteur natif du navigateur. Les motifs se comportent exactement comme dans votre code JS ; PCRE et Python partagent la plupart de la syntaxe mais diffèrent sur certaines constructions avancées.

Que signifient les indicateurs ?

g trouve toutes les correspondances au lieu de la première ; i ignore la casse ; m fait correspondre ^ et $ par ligne ; s permet au point de matcher les sauts de ligne ; u active la gestion Unicode complète.

Pourquoi mon motif fige-t-il la page ?

Certains motifs avec des quantificateurs imbriqués (comme (a+)+b) peuvent provoquer un retour arrière catastrophique sur des entrées longues. Raccourcissez le texte de test ou restructurez le motif — le même blocage toucherait votre code en production.

Qu'est-ce qu'un groupe de capture et pourquoi est-ce important ?

Des parenthèses autour d'une partie d'un motif créent un groupe de capture, qui extrait ce sous-texte précis séparément de la correspondance complète — par exemple (\d{4})-(\d{2})-(\d{2}) appliqué à une date donne l'année, le mois et le jour comme trois captures distinctes au lieu de simplement confirmer que la chaîne entière ressemblait à une date. Les groupes non capturants, écrits (?:...), regroupent pour la structure sans produire de capture supplémentaire.

Pourquoi mon motif a-t-il capturé plus (ou moins) de texte que prévu ?

Presque toujours un décalage gourmand/paresseux. .* et les quantificateurs similaires saisissent le plus possible par défaut ; ajoutez un ? (.*?, +?) pour les rendre paresseux et s'arrêter au premier point possible plutôt qu'au dernier. Ce simple caractère est généralement la correction quand une regex capture trop à travers plusieurs lignes ou balises.

Commentaires

Pas encore de commentaires — soyez le premier à en écrire un !

Outils similaires