Testeur de regex
Testez des expressions régulières JavaScript en direct. Voyez les correspondances surlignées et les groupes de capture listés.
Correspondances surlignées
Correspondances et groupes
- Saisissez votre motif de regex dans le champ ci-dessus (inutile de l’entourer de barres obliques).
- Activez les drapeaux voulus : g pour toutes les correspondances, i pour ignorer la casse, etc.
- Collez ou saisissez la chaîne de test dans la zone Chaîne de test.
- Les correspondances s’affichent en surbrillance en direct ; inspectez les groupes capturés dans le tableau ci-dessous.
Que fait-il ?
Ce testeur exécute votre motif sur la chaîne de test via le moteur RegExp natif du navigateur — le même que Node.js, Deno et tous les navigateurs utilisent. Les correspondances sont surlignées en ligne. Les groupes de capture numérotés et nommés sont extraits dans un tableau pour voir exactement ce que chaque segment entre parenthèses a attrapé.
Exemple
Motif (avec drapeau g) :
\b(\w+)@(\w+\.\w+)\b Chaîne de test :
Contact us at [email protected] or [email protected]. Not an email: foo@bar (no TLD). Correspondances :
1 [email protected] $1: hello $2: example.com
2 [email protected] $1: support $2: happycoder.dev foo@bar ne correspond pas parce que \w+\.\w+ exige un point dans le domaine.
Pourquoi ma regex ne correspond-elle pas ?
- Vous avez oublié le drapeau g. Sans lui, seule la première correspondance est renvoyée. /cat/.exec("cat cat") trouve une « cat » ; /cat/g les trouve toutes les deux.
- Métacaractères non échappés. example.com correspond aussi à examplexcom parce que . correspond à tout caractère. Échappez-le : example\.com.
- La correspondance gourmande absorbe trop. <.*> sur <a><b> capture le tout. Utilisez la forme paresseuse <.*?> ou la classe négative <[^>]*> pour s’arrêter au premier >.
- Confusion sur les limites de mot. \b est une position entre un caractère de mot et un non-mot. Des motifs comme \bfoo-bar\b échouent car le - central est déjà une limite non-mot.
- Décalage de casse. [a-z]+ ne correspondra pas à Hello. Ajoutez le drapeau i ou incluez [A-Za-z]+.
- ^ / $ multiligne. Sans le drapeau m, ils ancrent uniquement toute la chaîne, pas chaque ligne. Activez m si vous parcourez des lignes de log.
Questions fréquentes
Quelle variante de regex utilise ce testeur ?
Des regex JavaScript (ECMAScript), via le moteur RegExp intégré du navigateur. Cela diffère de PCRE (PHP, Perl), du module re de Python et des regex POSIX sur plusieurs points : pas de récursion, pas de quantificateurs possessifs, les groupes nommés utilisent (?<nom>...) au lieu de (?P<nom>...), et les raccourcis de classes comme \d sont en ASCII uniquement sauf si vous ajoutez le drapeau u.
Prend-il en charge le lookbehind ?
Oui. Les assertions lookbehind comme (?<=foo)bar et (?<!foo)bar ont été ajoutées en ES2018 et fonctionnent sur tous les Chromium, Firefox et Safari actuels. Si vous ciblez de très vieux navigateurs en production, vérifiez caniuse avant d’en dépendre — mais ce testeur lui-même les exécute sans souci.
Que signifient les drapeaux g, i, m, s et u ?
g trouve toutes les correspondances au lieu de la première seulement. i rend la recherche insensible à la casse. m fait que ^ et $ ciblent le début et la fin de chaque ligne au lieu de toute la chaîne. s (dotall) permet à . de correspondre aux sauts de ligne. u active la gestion complète de l’Unicode et une analyse des échappements plus stricte. Ne choisissez que ce dont vous avez besoin — g change particulièrement le nombre de correspondances.
Pourquoi mon quantificateur gourmand attrape-t-il trop ?
Les quantificateurs comme *, + et {n,} sont gourmands par défaut — ils capturent le plus possible et ne cèdent que si le reste du motif échoue. Ajoutez ? pour les rendre paresseux : .*? prend le moins possible. Correction classique de <a>.*</a> qui dévore plusieurs balises : utiliser <a>.*?</a> ou la classe négative <a>[^<]*</a>.
Comment référencer un groupe capturé plus loin dans le motif ou le remplacement ?
Dans le motif, utilisez \1, \2, etc. pour re-capturer le même texte qu’un groupe précédent — (\w+)\s+\1 attrape les mots répétés. Dans une chaîne de remplacement (non prise en charge dans ce testeur, mais dans String.replace), utilisez $1, $2. Les groupes nommés utilisent \k<nom> dans le motif et $<nom> dans les remplacements.
Pourquoi ma regex casse-t-elle quand elle contient un point, une barre ou une parenthèse ?
Ce sont des métacaractères de regex. Pour les faire correspondre littéralement, échappez-les avec un antislash : \. pour un point, \/ pour une barre (optionnel dans une chaîne new RegExp, requis entre littéraux /.../), \( et \) pour les parenthèses. Les caractères spéciaux sont . * + ? ^ $ { } ( ) | [ ] \ — chacun en texte littéral exige un échappement.
Conservez-vous la regex ou le texte de test que je saisis ici ?
Non. Nous ne gardons pas les motifs que vous écrivez ni le texte sur lequel vous les testez. Tout est supprimé à la fermeture ou au rafraîchissement de l’onglet — pas de journaux, aucune trace chez nous de ce que vous avez apparié. Vérifiez dans les outils de développement de votre navigateur si vous voulez vous en assurer.