Comment utiliser : Testeur de regex
- Saisissez votre motif entre les barres obliques, sans les
/ qui l’entourent. - Activez des flags comme
g (toutes les correspondances), i (ignorer la casse) et m (multiligne). - Collez votre texte de test. Les correspondances sont surlignées à droite et listées en dessous avec leur index et leurs groupes de capture.
- Cochez Remplacer et saisissez un remplacement comme
$1 ou $<name> pour prévisualiser String.replace. - Choisissez un motif dans la Bibliothèque de motifs pour partir d’une regex testée d’e-mail, d’URL, d’IP ou de date.
Les expressions régulières JavaScript
Ce testeur utilise le moteur RegExp de votre propre navigateur : les résultats sont donc exactement ceux que renvoient String.match, matchAll, replace et RegExp.exec en JavaScript et Node.js. Cela inclut la syntaxe moderne : groupes nommés (?<name>…), lookbehind (?<=…), échappements de propriétés Unicode comme \p{L} avec le flag u, et indices de correspondance avec le flag d.
Ce que font les flags
| Flag | Nom | Effet |
g | global | Trouve toutes les correspondances au lieu de s’arrêter à la première. |
i | ignoreCase | Les lettres correspondent sans tenir compte de la casse. |
m | multiline | ^ et $ correspondent au début et à la fin de chaque ligne. |
s | dotAll | . correspond aussi aux sauts de ligne. |
u | unicode | Traite le motif en points de code ; active \p{…} et \u{…}. |
y | sticky | Ne cherche une correspondance qu’à la position lastIndex courante. |
d | hasIndices | Indique les positions de début et de fin de chaque groupe de capture. |
Protection contre le backtracking catastrophique
Les motifs aux quantificateurs imbriqués, comme (a+)+$ ou (\w|\d)*x, peuvent prendre un temps exponentiel sur des entrées qui correspondent presque. Dans une page web normale, cela fige l’onglet. Ici, chaque recherche s’exécute dans un Web Worker en arrière-plan qui est arrêté au bout d’une seconde, et vous obtenez un avertissement clair au lieu d’un navigateur bloqué. Le même motif dans du code de production pourrait constituer une vulnérabilité ReDoS : considérez l’avertissement comme un bug à corriger.
Conseils pour écrire de meilleures regex
- Ancrez les motifs avec
^ et $ pour valider des valeurs entières, sinon une correspondance n’importe où dans la chaîne suffit.
- Préférez des classes précises comme
[^"]* à .* : elles sont plus rapides et évitent les correspondances trop larges.
- Utilisez des groupes non capturants
(?:…) quand vous n’avez pas besoin de la valeur capturée.
- Nommez vos groupes.
match.groups.year est plus lisible que match[1].
Questions fréquentes
Quelle variante de regex ce testeur utilise-t-il ?
JavaScript (ECMAScript), via le RegExp intégré à votre navigateur. L’essentiel de la syntaxe est commun avec PCRE, Python et Java, mais des fonctionnalités comme les quantificateurs possessifs, les groupes atomiques et les modificateurs inline comme (?i) ne sont pas disponibles en JavaScript.
Pourquoi mon motif ne trouve-t-il qu’une seule correspondance ?
Sans le flag g (global), JavaScript s’arrête après la première correspondance. Activez g pour trouver toutes les occurrences.
Comment référencer des groupes dans le remplacement ?
Utilisez $1, $2… pour les groupes numérotés, $<name> pour les groupes nommés, $& pour la correspondance entière et $$ pour un signe dollar littéral.
Pourquoi le testeur s’est-il arrêté sur un timeout ?
Le motif a mis plus d’une seconde sur votre entrée, ce qui signifie presque toujours un backtracking catastrophique. Cherchez des quantificateurs imbriqués comme (x+)+ ou des alternatives qui se chevauchent comme (a|a)*, et réécrivez-les pour que chaque caractère ne puisse correspondre que d’une seule façon.
Mes données de test sont-elles envoyées quelque part ?
Non. La recherche s’exécute localement dans un Web Worker de votre navigateur. Votre motif et votre texte ne sont enregistrés que dans votre propre navigateur, pour les retrouver à votre retour.