À propos de l’outil Testeur de regex
Une expression régulière (regex) décrit un motif de texte – par exemple « quatre chiffres, un tiret, puis deux chiffres » – et sert à rechercher, valider et réécrire du texte dans le code, les éditeurs, les outils en ligne de commande et les tableurs. Il est bien plus facile d’obtenir un motif qui trouve exactement ce que vous voulez quand vous voyez les correspondances immédiatement.
Ce testeur utilise le moteur de regex JavaScript de votre navigateur : les résultats sont donc les mêmes que ceux de RegExp, match et replace en JavaScript et dans Node.js. Les correspondances sont surlignées pendant la saisie, chacune est listée avec sa position et ses groupes de capture, et le mode « Remplacer » montre ce que produit une chaîne de remplacement.
Les motifs s’exécutent dans un worker d’arrière-plan avec une limite de temps : un motif qui provoque un retour arrière catastrophique ne peut donc pas figer la page. Votre motif et votre texte restent dans votre navigateur.
Mode d’emploi
- Saisissez un motif dans « Expression régulière », sans les barres obliques qui l’entourent – ou cliquez sur l’un des exemples.
- Activez ou désactivez les drapeaux (flags) : g, i, m, s, u et y, ainsi que d et v si votre navigateur les prend en charge.
- Collez le texte à parcourir dans « Texte de test ». Les correspondances sont marquées sous « Correspondances surlignées » et listées sous « Détails des correspondances » avec leur index, leur longueur et leurs groupes.
- Choisissez « Remplacer » sous « Mode » et saisissez un remplacement comme $<day>/$<month>/$<year> pour voir le « Résultat après remplacement », puis cliquez sur « Copier le résultat ».
- Consultez la syntaxe dans l’aide-mémoire sous le testeur, et utilisez « Effacer » pour recommencer.
Fonctionnalités
- Surlignage en direct et détails des correspondances: Chaque correspondance est surlignée dans le texte et listée avec son index, sa longueur et ses groupes de capture numérotés et nommés. Les correspondances vides (de longueur nulle) s’affichent sous forme de fins repères et, avec le drapeau d, le début et la fin de chaque groupe sont indiqués.
- Aperçu du remplacement: Testez un remplacement avec la syntaxe de JavaScript : $1 et $<name> pour les groupes, $& pour la correspondance entière, $` et $' pour le texte avant et après, et $$ pour un signe dollar.
- Le vrai moteur JavaScript: La recherche utilise l’implémentation RegExp du navigateur : le comportement et les erreurs de syntaxe sont exactement ceux que verra votre code JavaScript.
- Protection contre les motifs qui s’emballent: Chaque exécution a lieu dans un Web Worker et s’arrête au bout de 1,5 seconde. Au lieu d’un onglet figé, vous obtenez une explication du retour arrière catastrophique.
- Exemples et aide-mémoire: Chargez des motifs simples pour du texte ressemblant à une adresse e-mail, des dates ISO, des couleurs hexadécimales et des mots répétés, et retrouvez d’un coup d’œil les éléments de syntaxe et les codes de remplacement courants.
Exemples
Reformater des dates
Chargez l’exemple « Date ISO » et passez en mode « Remplacer » : le motif capture l’année, le mois et le jour dans des groupes nommés, et le remplacement $<day>/$<month>/$<year> transforme 2024-03-15 en 15/03/2024.
Trouver des mots en double
Le motif \b(\w+)\s+\1\b avec le drapeau i trouve "is is" et "the the" – même quand le mot répété continue à la ligne suivante. Un remplacement par $1 supprime le doublon.
Extraire les couleurs d’une feuille CSS
Avec #(?:[0-9a-f]{6}|[0-9a-f]{3})\b et les drapeaux g et i, la liste des correspondances affiche chaque couleur hexadécimale à trois ou six chiffres d’une feuille de style, tandis que les valeurs non valides comme #12345G sont ignorées.
Diagnostiquer un motif lent
L’exemple « Motif lent (démo) » ^(a+)+$, appliqué à une longue suite de "a" suivie de "b", est arrêté au bout de 1,5 seconde avec un avertissement. Le + imbriqué est en cause ; ^a+$ trouve le même texte instantanément.
Limites et remarques
- Seule la syntaxe des regex JavaScript est prise en charge. Les fonctionnalités d’autres variantes, comme les quantificateurs possessifs, les groupes atomiques, la récursion ou \A et \Z, ne sont pas disponibles, et la syntaxe exacte prise en charge dépend de votre navigateur.
- Le texte de test est limité à 200 000 caractères. Jusqu’à 5 000 correspondances sont listées et surlignées ; le nombre de correspondances et le mode « Remplacer » couvrent quand même toutes les correspondances.
- Chaque exécution est arrêtée au bout de 1,5 seconde. Un motif légitime mais très lourd sur un long texte peut donc aussi être arrêté.
- Comme en JavaScript, sans le drapeau g, seule la première correspondance est trouvée et remplacée.
- Les motifs d’exemple sont volontairement simples, pour apprendre et faire des recherches rapides. Ce ne sont pas des validateurs complets – l’exemple de date accepte par exemple 2024-02-30.
- L’index et la longueur sont comptés en unités de code UTF-16, comme en JavaScript : un emoji compte donc pour deux caractères.
Questions fréquentes
Quelle variante de regex ce testeur utilise-t-il ?
JavaScript (ECMAScript), exécuté par le moteur de votre navigateur. Les motifs qui fonctionnent ici fonctionnent de la même façon dans du code JavaScript et Node.js. Les motifs Python, PCRE (PHP) et Java sont souvent proches, mais diffèrent sur des détails comme la prise en charge des assertions arrière (lookbehind), les drapeaux en ligne et la syntaxe des groupes nommés.
Pourquoi mon motif ne trouve-t-il qu’une seule correspondance ?
Activez le drapeau g (global). Sans lui, JavaScript s’arrête après la première correspondance – aussi bien pour la recherche que pour le remplacement.
Qu’est-ce que le retour arrière catastrophique ?
Les motifs avec des quantificateurs imbriqués ou qui se chevauchent, comme (a+)+ ou (\w|\d)*, peuvent essayer un nombre exponentiel de façons de faire correspondre un texte qui correspond presque. Le moteur peut alors tourner pendant des minutes. Rendre le motif plus précis – par exemple ^a+$ au lieu de ^(a+)+$ – règle généralement le problème.
Comment utiliser un groupe capturé dans le remplacement ?
Écrivez $1, $2 et ainsi de suite pour les groupes numérotés, ou $<name> pour un groupe écrit (?<name>…). $& insère la correspondance entière, et $$ insère un signe dollar littéral.
Dois-je échapper les barres obliques ?
Pas dans ce testeur : les barres obliques autour de la zone ne sont qu’une décoration, et le motif est transmis directement à new RegExp(). Dans un littéral de regex JavaScript comme /a\/b/, en revanche, une barre oblique doit être échappée.
Mon texte est-il envoyé à un serveur ?
Non. La recherche s’exécute dans un Web Worker à l’intérieur de cette page, et ni le motif ni le texte ne sont envoyés sur le réseau.