Testeur Regex
Testez vos expressions régulières sur un texte réel avec une liste des correspondances, extraction des groupes capturés et aperçu des substitutions, le tout via WebAssembly.
Ce que fait l'outil
- Liste chaque correspondance avec ses positions de début et de fin
- Extraction des groupes capturés par correspondance
- Aperçu du remplacement avec références $1 et ${nom}
- Options g, i, m, s activables indépendamment
- Moteur en temps linéaire : pas de retour arrière catastrophique
Saisissez un motif, collez le texte à analyser, choisissez vos options et cliquez sur Tester : l'outil liste chaque correspondance avec sa position et le contenu de chaque groupe capturé. Ajoutez une chaîne de remplacement et cliquez sur Remplacer pour voir le texte après un rechercher-remplacer, puis copiez-le. Les motifs sont compilés par la bibliothèque Rust regex, le moteur utilisé par des outils comme ripgrep, exécutée en WebAssembly dans votre navigateur. Extraits de logs, données clients ou code source testés ne sont jamais téléversés.
Comment tester une expression régulière
- Saisissez le motif dans Motif, sans barres obliques autour :
(\d{4})-(\d{2})et non/(\d{4})-(\d{2})/g. - Activez les options nécessaires (
gest active par défaut). - Collez votre texte d'exemple dans Texte d'entrée.
- Cliquez sur Tester. Le compteur indique le nombre de correspondances, et chaque carte affiche le texte trouvé, ses positions de début et de fin, puis chaque groupe capturé avec ses propres positions.
- Facultatif : saisissez un Remplacement comme
$2/$1et cliquez sur Remplacer. Le champ de sortie montre le texte transformé et le message d'état le nombre de remplacements.
Les options (flags) expliquées
- g (global) : trouve toutes les correspondances. Sans elle, seule la première est signalée et seule la première occurrence est remplacée.
- i (insensible à la casse) :
erreurtrouve aussiERREURetErreur, y compris pour les lettres accentuées commeÉ. - m (multiligne) :
^et$correspondent au début et à la fin de chaque ligne, et non plus seulement du texte entier. Indispensable pour ancrer un motif sur des lignes de log. - s (dotall) : le point
.correspond aussi aux retours à la ligne, pour les motifs qui s'étendent sur plusieurs lignes. - u (Unicode) : la prise en charge Unicode est toujours active dans ce moteur,
\wet\dreconnaissent déjà les lettres et chiffres de toutes les écritures. Le bouton existe par habitude JavaScript et ne change rien.
Les options en ligne fonctionnent aussi : (?i) en début de motif le rend insensible à la casse sans passer par le bouton.
Syntaxe prise en charge, et différences avec JavaScript ou PCRE
Le moteur Rust gère la syntaxe du quotidien : classes de caractères ([a-z], \d, \w, \s), quantificateurs (*, +, ?, {2,5} et leurs versions non gourmandes), alternatives, ancres, limites de mot \b, groupes non capturants (?:...), groupes nommés (?<annee>...) ou (?P<annee>...), et classes Unicode comme \p{L}.
Deux fonctions sont volontairement absentes, et un motif qui les utilise est refusé avec un message explicite :
- Les assertions avant et arrière :
(?=...),(?!...)et(?<=...). - Les références arrière comme
\1dans le motif.
C'est le prix d'une garantie forte : le temps de recherche croît linéairement avec la taille du texte, donc aucun motif ne peut figer la page par un retour arrière catastrophique, cause de nombreux dénis de service par regex (ReDoS) dans les moteurs à backtracking. Si votre code cible JavaScript, Python ou PCRE et s'appuie sur des assertions, testez ces parties dans un environnement doté de ce moteur.
Syntaxe du remplacement
$1,$2: contenu des groupes numérotés.$0désigne la correspondance entière.${annee}: contenu d'un groupe nommé.${1}abc: utilisez les accolades quand un numéro de groupe est suivi de lettres ou de chiffres, sinon$1abcest lu comme un groupe nommé « 1abc » et n'insère rien.$$: un signe dollar littéral.
Lire les positions
Les positions de début et de fin sont des décalages en octets dans le texte UTF-8, la fin étant exclue. Pour un texte purement ASCII, elles égalent les positions en caractères. Mais en français, chaque lettre accentuée occupe deux octets (et un emoji quatre) : après un « é », les positions sont décalées d'une unité par rapport à un simple comptage de caractères. Les groupes qui n'ont pas participé à une correspondance sont signalés comme sans correspondance.
Usages typiques
- Mettre au point un motif pour extraire des identifiants, des e-mails ou des dates de logs, en contrôlant chaque capture avant de l'intégrer au code.
- Préparer un rechercher-remplacer sur un CSV ou un fichier de config, avec un aperçu du résultat avant de l'appliquer au vrai fichier.
- Construire des motifs pour des outils qui partagent ce moteur ou une syntaxe proche, comme ripgrep, ou pour des programmes Rust.
Confidentialité : votre texte d'exemple reste local
Pour bien tester un motif, il faut de vraies données : logs de production avec adresses IP et identifiants, exports clients, fichiers source. Les testeurs en ligne qui évaluent côté serveur, ou qui sauvegardent les sessions pour les partager, en conservent une copie. Ici, le motif est compilé et exécuté en WebAssembly dans l'onglet : rien n'est transmis ni sauvegardé, et les données personnelles de vos logs restent sous votre contrôle, comme l'attend le RGPD.
Foire aux questions
- Le texte testé est-il envoyé quelque part ?
- Non. La recherche et le remplacement s'exécutent dans votre navigateur. Ni le motif ni le texte ne sont transmis.
- Pourquoi mon lookahead est-il refusé ?
- Le moteur regex de Rust ne gère ni les assertions avant et arrière ni les références arrière, en échange d'un temps d'exécution linéaire garanti. Réécrivez le motif avec des groupes capturants, ou testez-le dans un moteur qui prend en charge ces fonctions.
- Le testeur se met-il à jour pendant la frappe ?
- Non. Cliquez sur Tester ou Remplacer pour exécuter le motif, ce qui garde la page réactive sur de gros textes.
- Pourquoi les positions ne correspondent-elles pas au nombre de caractères ?
- Elles sont comptées en octets UTF-8. Les caractères non ASCII, comme les lettres accentuées, occupent deux à quatre octets et décalent les positions suivantes.
- Mon motif fonctionnera-t-il en JavaScript ou en Python ?
- La syntaxe courante est commune. Les différences portent sur les assertions et les références arrière (non gérées ici), ainsi que sur quelques détails de groupes nommés et d'échappement. Vérifiez la documentation du moteur cible pour ces points.
- À quoi sert l'option u ?
- À rien de plus : la correspondance Unicode est toujours activée dans ce moteur.
Outils connexes : comparez un texte avant et après remplacement avec le diff de texte, ou encodez des caractères spéciaux dans une URL avec l'encodeur et décodeur d'URL.