Testeur de regex
Testez une expression régulière en direct : correspondances, groupes de capture, aperçu des remplacements et découpage — sémantique JavaScript.
Saisissez un motif et un texte pour voir les résultats
Ce que fait cet outil
Une expression régulière est un langage compact pour décrire des motifs de texte, et la seule façon fiable d’en écrire une est de la regarder s’exécuter sur du texte réel. Ce testeur fait exactement cela, en direct, dans trois modes. Correspondre montre chaque endroit où le motif correspond, surligné dans votre texte, avec chaque groupe de capture listé en dessous. Remplacer prévisualise ce que produirait String.replace, y compris les références $1 et lt;name>. Découper montre comment String.split couperait le texte — y compris les parties que presque personne ne prédit correctement, comme les délimiteurs capturés qui apparaissent dans le résultat.
Le motif s’exécute sur le moteur JavaScript de votre propre navigateur, pas sur une imitation. Ce qui correspond ici est exactement ce qui correspondra dans votre code JavaScript, octet pour octet, parce que c’est le même moteur qui fait le travail.
Lire les résultats de correspondance
Chaque correspondance est surlignée dans le texte d’essai et listée en dessous avec sa position — les décalages de caractères où elle commence et se termine. Si le motif contient des groupes de capture, chaque groupe apparaît sous sa correspondance avec la valeur qu’il a capturée. Les groupes sont numérotés par leur parenthèse ouvrante, de gauche à droite, exactement comme le moteur les numérote pour $1, $2 et les rétroréférences ; un groupe nommé affiche son nom à côté de son numéro. Un groupe qui n’a pas pris part à la correspondance — par exemple le côté perdant d’une alternance — est signalé comme tel plutôt qu’affiché comme chaîne vide, car pour votre code ce sont deux choses différentes : undefined contre "".
Un motif peut légitimement correspondre à zéro caractère — ^, \b ou une alternative vide en sont capables. Ces correspondances de longueur nulle ne surlignent rien, alors l’outil marque la position d’un trait fin plutôt que de vous laisser vous demander où est passée la correspondance.
Les drapeaux
Les drapeaux changent le comportement du motif entier, et deux d’entre eux causent l’essentiel de la confusion autour des regex :
- g (global) — trouve toutes les correspondances, pas seulement la première. Sans lui, correspondre montre un seul résultat et remplacer ne change qu’une occurrence. C’est le drapeau qu’on oublie le plus.
- i (ignorer la casse) — les lettres correspondent quelle que soit leur casse.
- m (multiligne) — ^ 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. Sans lui, . s’arrête à chaque retour à la ligne.
- u (Unicode) — le motif travaille en points de code : les emoji et autres caractères hors du plan de base se comportent correctement, et les échappements de propriétés \p{…} deviennent disponibles.
- y (ancré) — la correspondance doit commencer exactement là où la précédente s’est terminée. Utile pour les tokeniseurs ; surprenant partout ailleurs.
- d (indices) — le moteur enregistre les positions exactes de chaque groupe. Cela ne change rien à ce qui correspond.
Les références de remplacement
Le texte de remplacement n’est pas pris littéralement — une poignée de séquences en $ sont développées pour chaque correspondance. $1 à $9 insèrent ce que les groupes numérotés ont capturé, lt;name> insère un groupe nommé, amp; insère la correspondance entière, et $ produit un signe dollar littéral. Tout le reste est copié tel quel.
"2026-07-20".replace(/(?<y>\d{4})-(\d{2})-(\d{2})/, "$3.$2.lt;y>")
// → "20.07.2026"Un comportement de JavaScript qui mérite d’être intégré : sans le drapeau g, replace ne change que la première occurrence. Ce n’est pas une bizarrerie de cet outil — c’est ce que fera votre code. L’outil affiche un indice quand g est désactivé, pour que le remplacement unique ne passe pas pour un bogue.
Comment split se comporte vraiment
String.split avec une regex a deux comportements qui surprennent régulièrement même les développeurs expérimentés, et le mode découper existe en grande partie pour les rendre visibles. D’abord, si le motif contient des groupes de capture, ce qu’ils capturent est entrelacé dans le tableau résultat entre les morceaux — découper « a,b » avec (,) produit trois parties : a, la virgule, b. Ensuite, les correspondances tout au début ou à la fin du texte, ou deux correspondances adjacentes, produisent des chaînes vides dans le résultat, que l’outil affiche explicitement au lieu de les cacher.
"a,b".split(/(,)/) // → ["a", ",", "b"] ",a,".split(/,/) // → ["", "a", ""]
Les motifs emballés sont arrêtés, pas subis
Certains motifs sont des pièges. Un quantificateur imbriqué comme (a+)+ essayé contre une longue chaîne qui correspond presque force le moteur à réessayer un nombre exponentiel de combinaisons avant d’abandonner — c’est le retour sur trace catastrophique, et il peut geler un onglet de navigateur pendant des minutes. Cet outil exécute votre motif dans un thread worker séparé et l’arrête au bout de deux secondes : un motif emballé vous coûte un message plutôt qu’une page figée. Si vous voyez ce message, cherchez dans le motif des quantificateurs imbriqués ou des alternatives qui se chevauchent ; la correction consiste généralement à faire en sorte que la répétition interne et l’externe ne puissent pas correspondre au même texte.
Comme pour chaque outil de ce site, le motif et le texte ne quittent jamais votre appareil — le worker fait partie de la page, pas d’un serveur.
Questions fréquentes
- Quelle saveur de regex ce testeur utilise-t-il ?
- JavaScript (ECMAScript), parce que le motif s’exécute sur le moteur du navigateur lui-même. Les groupes nommés, le lookbehind et les échappements de propriétés Unicode \p{…} fonctionnent comme en JavaScript moderne. Les motifs venus de PCRE ou de Python passent pour la plupart, mais les constructions absentes de JavaScript — quantificateurs possessifs, groupes atomiques, \A et \z — seront rejetées ou signifieront autre chose.
- Pourquoi mon motif ne trouve-t-il qu’une seule correspondance ?
- Presque toujours : le drapeau g est désactivé. Sans lui, JavaScript s’arrête à la première correspondance, et replace ne change que la première occurrence. Cochez la case g pour chercher dans tout le texte.
- Que signifie « n’a pas participé » pour un groupe ?
- Le groupe existe dans le motif mais n’a pas servi dans cette correspondance précise — le plus souvent parce qu’il se trouve dans la branche perdante d’une alternance, ou sous un quantificateur qui a correspondu zéro fois. En code, sa valeur est undefined, ce qui est différent de capturer une chaîne vide, et l’outil maintient cette distinction.
- Mon motif ou mon texte est-il envoyé à un serveur ?
- Non. La correspondance s’exécute entièrement dans votre navigateur, dans un thread worker de la même page. Le délai de sécurité de deux secondes est lui aussi appliqué localement — rien de ce que vous tapez ne quitte votre appareil.