Testeur de regex pour JavaScript

Saisissez une expression régulière et voyez chaque correspondance surlignée pendant la frappe, avec les groupes de capture, un aperçu du remplacement et une bibliothèque de motifs prêts à l’emploi.

Fonctionne dans le navigateurSans inscriptionAucun envoi de données

Correspondances surlignées

    
Utilisez $1, $<name>, $& (correspondance entière)
Détails des correspondances
#IndexCorrespondanceGroupes
Aide-mémoire regex
.Tout caractère sauf saut de ligne (tous avec s)
\d \w \sChiffre, caractère de mot, espace blanc
\D \W \SNon-chiffre, non-mot, non-espace
[abc] [^abc]L’un de / aucun de a, b, c
[a-z0-9]Plage de caractères
\p{L} \p{N}Lettre / nombre Unicode (nécessite u)
^ $Début / fin de l’entrée (de ligne avec m)
\b \BLimite de mot / pas une limite
* + ?0 ou plus, 1 ou plus, 0 ou 1
{n} {n,} {n,m}Exactement n, au moins n, entre n et m
*? +? ??Paresseux (le moins possible)
a|ba ou b
(…)Groupe de capture, référencé par $1
(?<name>…)Groupe nommé, $<name>
(?:…)Groupe non capturant
\1 \k<name>Référence arrière
(?=…) (?!…)Lookahead / lookahead négatif
(?<=…) (?<!…)Lookbehind / lookbehind négatif
\. \* \\Caractères littéraux échappés
\n \t \rSaut de ligne, tabulation, retour chariot
\uFFFFUnité de code Unicode
\u{1F600}Point de code (nécessite u)
$&Correspondance entière dans un remplacement
$` $'Texte avant / après la correspondance

Comment utiliser : Testeur de regex

  1. Saisissez votre motif entre les barres obliques, sans les / qui l’entourent.
  2. Activez des flags comme g (toutes les correspondances), i (ignorer la casse) et m (multiligne).
  3. Collez votre texte de test. Les correspondances sont surlignées à droite et listées en dessous avec leur index et leurs groupes de capture.
  4. Cochez Remplacer et saisissez un remplacement comme $1 ou $<name> pour prévisualiser String.replace.
  5. 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

FlagNomEffet
gglobalTrouve toutes les correspondances au lieu de s’arrêter à la première.
iignoreCaseLes lettres correspondent sans tenir compte de la casse.
mmultiline^ et $ correspondent au début et à la fin de chaque ligne.
sdotAll. correspond aussi aux sauts de ligne.
uunicodeTraite le motif en points de code ; active \p{…} et \u{…}.
ystickyNe cherche une correspondance qu’à la position lastIndex courante.
dhasIndicesIndique 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.

Outils associés