Regex tester pour JavaScript
Testez des expressions régulières JavaScript avec correspondances, groupes et remplacement en direct. Tout s'exécute localement — rien n'est téléversé.
- Entrée
- Pattern · flags · test text
- Sortie
- Matches · groups · replaced text
Texte de test
Plutôt besoin de planifier que de rechercher ? Ouvrir le générateur d'expressions cron
Tester des expressions régulières pendant que vous tapez
Ce testeur de regex exécute votre motif avec le moteur JavaScript de votre propre navigateur, celui-là même qu'utilisera votre code Node.js ou front-end, et surligne chaque correspondance dans le texte de test pendant la saisie. À côté, vous obtenez la liste des correspondances avec leurs positions et groupes de capture, un aperçu du remplacement, et une explication ligne par ligne de ce que fait chaque partie du motif. Votre motif et votre texte ne quittent jamais la page.
Comment tester une regex
- Tapez le motif entre les barres obliques, sans les
/…/autour, ou chargez-en un depuis le menu Motifs courants. - Activez ou désactivez les drapeaux :
gpour trouver toutes les correspondances,ipour ignorer la casse,mpour que^et$fonctionnent ligne par ligne, et ainsi de suite. - Collez ou tapez votre texte de test. Les correspondances sont surlignées en couleurs alternées pour que des correspondances voisines restent distinctes.
- Ouvrez Correspondances pour la position et les groupes de chacune, Explication pour une décomposition en langage clair, ou Remplacer pour prévisualiser une substitution avec
$1,$<name>ou$&.
Les drapeaux des expressions régulières JavaScript
- g (global)
- Trouve toutes les correspondances au lieu de s'arrêter à la première. Le remplacement les remplace aussi toutes.
- i (ignore case)
- Les lettres correspondent quelle que soit leur casse : /cat/i trouve Cat et CAT.
- m (multiline)
- ^ et $ correspondent au début et à la fin de chaque ligne, pas seulement du texte entier.
- s (dotAll)
- Le point correspond aussi aux sauts de ligne, qu'il ignore sinon.
- u (unicode)
- Traite le motif comme des points de code Unicode : les emoji comptent pour un caractère et les échappements de propriété \p{…} fonctionnent. Syntaxe plus stricte.
- v (unicodeSets)
- Le successeur plus récent et plus strict de u, qui ajoute des opérations d'ensemble comme [\p{L}--[a-z]] dans les classes. Affiché seulement si votre navigateur le prend en charge.
- y (sticky)
- Chaque correspondance doit commencer exactement là où la précédente s'est terminée ; utile pour les tokenizers.
Groupes, références arrière et remplacement
Les parenthèses capturent : (\d{4})-(\d{2}) stocke l'année dans le groupe 1 et le mois dans le groupe 2. Nommez un groupe avec (?<year>\d{4}) et il devient aussi accessible via groups.year dans le code et via $<year> dans un remplacement. Utilisez (?:…) quand vous avez besoin d'un groupe pour une alternative ou un quantificateur sans vouloir capturer.
Dans le motif, \1 ou \k<name> correspond au même texte qu'un groupe a capturé plus tôt : c'est ainsi que le motif des mots répétés de la bibliothèque trouve « le le ». Les assertions comme (?=…), (?!…), (?<=…) et (?<!…) testent ce qui précède ou suit sans le consommer ; le motif de mot de passe robuste utilise quatre assertions avant pour exiger chaque type de caractère.
Dans la chaîne de remplacement, $& insère la correspondance entière, $1–$99 un groupe numéroté, $<name> un groupe nommé, $` et $' le texte avant et après la correspondance, et $$ un signe dollar littéral.
Quantificateurs : gourmands et paresseux
Les quantificateurs indiquent combien de fois l'élément qui les précède peut se répéter : * zéro fois ou plus, + une fois ou plus, ? zéro ou une fois, et {2,5} entre deux et cinq fois. Par défaut, ils sont gourmands : ils prennent autant de texte que possible, puis en rendent une partie si la suite du motif échoue. Ajoutez un point d'interrogation pour en rendre un paresseux : <.+?> correspond à une seule balise HTML, alors que <.+> va du premier < jusqu'au dernier > de la ligne.
L'onglet Explication détaille cela pour chaque quantificateur de votre motif : vous voyez d'un coup d'œil quelles parties se répètent, combien de fois, et si elles sont gourmandes ou paresseuses. Les classes de caractères comme [A-Za-z0-9_] sont listées plage par plage, et les échappements comme \d, \w et \s sont nommés, ce qui rend bien plus rapide la lecture d'un motif hérité de quelqu'un d'autre.
Le backtracking catastrophique, et pourquoi ce testeur ne se fige pas
Certains motifs prennent un temps exponentiel sur une entrée qui correspond presque. L'exemple classique est (a+)+$ face à une longue suite de a suivie d'un b : le moteur essaie toutes les manières de répartir les a entre la répétition intérieure et extérieure avant d'abandonner. En production, c'est un vrai risque de déni de service, connu sous le nom de ReDoS.
Ici, la recherche s'exécute dans un worker séparé en arrière-plan, avec une limite de temps. Si un motif prend trop de temps, le worker est arrêté et vous voyez un avertissement au lieu d'un onglet figé. La correction habituelle consiste à supprimer les quantificateurs imbriqués portant sur les mêmes caractères, à rendre les alternatives mutuellement exclusives ou à ancrer le motif. Les résultats sont plafonnés à 10 000 correspondances.
Une alternative à regex101 centrée sur JavaScript
Des outils comme regex101 prennent en charge plusieurs variantes de regex ; celui-ci n'en prend volontairement en charge qu'une, le moteur ECMAScript de votre navigateur : ce qui correspond ici correspond en JavaScript et en TypeScript. Les fonctionnalités PCRE comme les quantificateurs possessifs, les groupes atomiques et la récursion n'existent pas en JavaScript, et l'explication traitera leur syntaxe littéralement. La bibliothèque couvre les motifs que l'on cherche tous les jours : e-mail, URL, adresses IPv4 et IPv6, dates ISO, couleurs hexadécimales, UUID, numéros de téléphone E.164, slugs, heures au format 24 h et mots de passe robustes. Chacun est un motif pragmatique, pas une grammaire RFC complète ; validez aussi les entrées critiques avec un analyseur dédié.
Vous travaillez sur des planifications plutôt que sur des chaînes ? Le générateur d'expressions cron explique la syntaxe cron comme cet outil explique les regex.
Questions fréquentes
- Quelle variante de regex ce testeur utilise-t-il ?
- JavaScript (ECMAScript), exécuté par le moteur de votre propre navigateur. Les résultats correspondent à ce que font RegExp, String.prototype.match et replace dans Node.js, Deno, Bun et les navigateurs de même version.
- Comment faire correspondre une regex sur plusieurs lignes ?
- Activez le drapeau m pour que ^ et $ correspondent à chaque ligne, et le drapeau s si le point doit aussi correspondre aux sauts de ligne. Sans s, utilisez [\s\S] pour correspondre à n'importe quel caractère, saut de ligne compris.
- Comment utiliser un groupe de capture nommé dans un remplacement ?
- Nommez le groupe avec (?<name>…) et faites-y référence avec $<name> dans la chaîne de remplacement. Les groupes numérotés sont $1, $2 et ainsi de suite, et $& insère la correspondance entière.
- Pourquoi ma regex ne trouve-t-elle que la première correspondance ?
- Sans le drapeau g, une regex JavaScript s'arrête après la première correspondance, et replace ne modifie que celle-là. Activez g pour trouver et remplacer toutes les occurrences.
- Qu'est-ce que le backtracking catastrophique ?
- C'est quand un motif avec des quantificateurs imbriqués ou qui se chevauchent, comme (a+)+, pousse le moteur à essayer un nombre exponentiel de chemins sur une entrée qui correspond presque. Ce testeur arrête ces exécutions après une limite de temps au lieu de figer la page.
- Quelle est une bonne regex pour les adresses e-mail ?
- Un motif pratique est [A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}, présent dans la bibliothèque. Aucune regex n'implémente entièrement la norme des e-mails : le seul vrai test d'une adresse est d'y envoyer un e-mail de confirmation.
- Mes données de test sont-elles envoyées quelque part ?
- Non. La recherche, le remplacement et l'explication s'exécutent tous dans votre navigateur : vous pouvez tester sans risque des motifs sur des logs ou des données clients.