
Tester une regex en ligne : guide pratique pour déboguer vos expressions régulières
Testez une regex JavaScript, inspectez les groupes de capture et prévisualisez un remplacement $1 dans le navigateur, avant la mise en production.
Un motif qui a l'air juste mérite quand même une entrée qui échoue
Une expression régulière est un petit programme. Elle s'écrit vite, se colle depuis un commentaire, et coûte cher quand elle accepte la mauvaise chaîne ou fige l'onglet. Le testeur de regex en ligne exécute le moteur RegExp JavaScript du navigateur sur un motif et un texte collés localement — surlignage à gauche, cartes de correspondance avec groupes à droite, et un aperçu de remplacement en option. Il n'y a pas de choix de dialecte : ce n'est ni PCRE, ni Python, ni le moteur d'une base de données. C'est la même famille que Node, et que le mot-clé pattern d'un JSON Schema évalué par Ajv. La page est sur le hub des utilitaires développeur, à côté de slugify et du convertisseur de casse, pour les tâches qui ne devraient pas être une expression écrite à la main.
Où le testeur aide, et où un test unitaire doit prendre le relais
Un motif que vous allez coller dans du code, une fixture, ou le mot-clé pattern d'un JSON Schema.
Certaines tâches ont déjà un outil qui encode les règles. Une expression écrite à la main dérivera.
Des motifs qui passent un coup d'œil et cassent sur une vraie entrée
Le testeur compile le champ avec new RegExp. Une construction récursive comme (?R) est invalide ici et affiche l'erreur du moteur. Les barres obliques autour du champ sont l'habillage de l'interface, pas une partie du motif. Coller /(\w+)/gi retire les délimiteurs et fusionne ces flags avec ceux déjà cochés — il ne les remplace pas. Si g était déjà actif, il le reste. Second piège, la barre oblique inverse : le champ est la source de la regex, donc \d signifie « des chiffres ». Coller \\d depuis une chaîne JSON ou Java cherche une barre oblique inverse littérale suivie de d.
Sur "one" and "two", le motif ".+" avec g renvoie une seule correspondance : tout l'intervalle, du premier guillemet au dernier. Le moteur prend le plus possible, puis rend des caractères jusqu'à ce que le dernier guillemet convienne. Passer à ".+?" ne veut pas dire « seulement les mots voulus ». Avec g, on obtient deux correspondances, "one" et "two". Paresseux signifie le succès le plus court, pas un filtre sémantique. "[^"]*" est le motif qui ne peut pas franchir un guillemet.
Une forme comme (a+)+ face à une longue suite de a qui n'atteint jamais la fin attendue peut exploser en backtracking catastrophique. Le testeur n'a pas de délai côté serveur. Il tourne sur le fil principal de l'onglet, donc la page peut se figer. L'outil plafonne ce qu'il renvoie : la recherche globale s'arrête et affiche un avertissement de troncature, soit parce qu'elle a atteint le plafond souple de 500 correspondances, soit parce qu'un motif de largeur nulle a déclenché le garde-fou (le moteur avance d'un caractère après un match vide pour que g ne tourne pas indéfiniment). Ce garde-fou ne rend pas un quantifieur imbriqué sûr. L'envoi de fichier accepte .txt, .md et .log jusqu'à 32 Mio dans le texte de test, toujours en local — un journal entier plus un motif imbriqué est un bon moyen de bloquer l'onglet.
La puce « Email (approx.) » est [A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,} sur [email protected] x not-an-email [email protected]. Avec g, elle surligne [email protected] et [email protected]. C'est une démo, pas la RFC 5322, et la page le dit. La même honnêteté vaut pour le mode sticky : le flag y ne matche ici qu'au début du texte de test, parce que lastIndex est remis à zéro à chaque exécution. Il ne « reprend pas là où le match précédent s'est arrêté » d'un clic à l'autre. Et les résultats ne se mettent pas à jour pendant la frappe. Changer le motif, les flags, le mode ou le texte efface les cartes jusqu'au prochain clic sur Tester.
Ce que chaque flag et chaque mode changent vraiment ici
Six flags, pas d'autres. Le défaut est g seul.
Le mode correspondance liste les hits. Le mode remplacement montre aussi la chaîne substituée, avec les motifs de remplacement JavaScript.
Une capture nommée est le même groupe que son numéro. La carte ne l'affiche qu'une fois.
Un cas, puis une seule variable à la fois
Sur le testeur de regex, rien ne s'exécute pendant la frappe. Les cartes précédentes s'effacent dès que les entrées changent.
Écrire la source, pas un littéral
Saisissez \d+, pas /\d+/g. Si vous collez quand même un littéral /motif/flags, le collage ou la perte de focus retire les délimiteurs et fusionne les flags. Un motif vide est une erreur. Un motif invalide affiche le message JavaScript.
Ne basculer que le flag que vous voulez tester
g est actif par défaut. Coupez-le pour confirmer que vous vouliez vraiment un seul match. Ajoutez m avant de faire confiance à ^ sur une seconde ligne. Ajoutez u avant \p{…} — sans lui, \p{L} matche les caractères littéraux p{L}, pas les lettres. Laissez y coupé, sauf pour vérifier un match qui doit commencer à l'index 0.
Appuyez sur Tester et lisez la carte, pas seulement le surlignage
Le surlignage montre où se trouve le hit. La carte montre l'index et chaque groupe. Cliquez une carte pour mettre ce hit en évidence. En mode remplacement, lisez la chaîne substituée sous les cartes avant de copier le motif dans le code.
Les puces sont des fixtures, pas une bibliothèque de validateurs de production.
(\w+)=(\d+) sur user=42 role=admin env=prod\d, \w, \s, ., [], ^, $, \b, +, *, ? et () au curseur. Crochets et parenthèses placent le curseur à l'intérieur.txt, .md ou .log jusqu'à 32 Mio dans le texte de test, dans le navigateur. Préférez un court extrait quand le motif n'est pas clairement linéaireLe même moteur dans Node
Le RegExp de Node est le même langage. matchAll exige le flag g. Sans g, appelez exec une fois.
Exemple de base
Les motifs de remplacement sont ceux que le champ de remplacement accepte. C'est la puce intégrée, pas un langage de template maison.
Exemple de base
Pas d'installation, rien n'est envoyé, flags et groupes visibles, aperçu de remplacement inclus. Contrepartie : pas de choix de dialecte, mode sticky seulement à l'index 0, 500 correspondances renvoyées au plus, et un quantifieur imbriqué peut figer l'onglet parce que l'exécution est locale. Gardez la page pour une fixture et une revue de code. Commitez le motif à côté des tests quand il protège une entrée de production. Si l'expression ne servait qu'à tenir lieu d'un slug ou d'un changement de casse, passez à slugify ou au convertisseur de casse plutôt que de la maintenir.
Conclusion
Testez le motif contre une chaîne qui doit échouer, dans le moteur qui l'exécutera. Pour JavaScript, ce moteur est RegExp, celui qu'utilise le testeur de regex — y compris un pattern JSON Schema que vous compilerez ensuite avec Ajv dans le validateur JSON Schema. Ne prenez pas la puce « Email (approx.) » pour un validateur, n'attendez pas que le flag y reprenne au milieu de la chaîne, et ne donnez pas un journal de 32 Mio à un quantifieur imbriqué. Quand la tâche est un slug ou un changement de casse, laissez l'expression et utilisez l'outil dédié sur le hub des utilitaires développeur.
Articles connexes

UUID v4 aléatoire, UUID v7 et ULID triables par date, Nanoid compact : comparatif et générateurs en ligne pour clés primaires et IDs publics.

Calculez MD5, SHA ou un HMAC dans le navigateur. Hex, Base64 ou Base64URL — checksum de texte et signature de webhook, 100 % local.

Évitez SSH et nginx pour un side project Next.js. Comparez Railway, Render, Vercel et un VPS, puis déployez depuis Git après avoir minifié les assets dans le navigateur.