UltKit

Testeur de regex

Saisissez un motif, cochez les drapeaux utiles et collez votre texte : chaque correspondance est surlignée au fil de la frappe et listée avec sa position et ses groupes de capture. Le motif est exécuté par le moteur d'expressions régulières JavaScript de votre navigateur : les résultats sont donc identiques à ceux de votre code, et le texte reste sur votre appareil.

Drapeaux

0 caractères · 0 mots · 0 lignes

Les correspondances sont mises en évidence ici.

0 caractères · 0 mots · 0 lignes

Fonctionne entièrement dans cet onglet du navigateur. Votre texte n’est jamais envoyé ni stocké.

Éléments de regex JavaScript

La colonne de première correspondance a été produite en exécutant chaque motif sur son texte avec le moteur JavaScript qui a construit cette page.

JetonSignificationMotifTextePremière correspondance
\dChiffre 0–9/\d+/Order 66 shipped66
\wLettre, chiffre ou tiret bas (ASCII)/\w+/snake_case-idsnake_case
\sEspace blanc, y compris tabulations et sauts de ligne/\s+/two spaces
.Tout caractère sauf un saut de ligne (sauf avec s)/a.c/abc a-cabc
^ $Début et fin de l’entrée (ou de la ligne, avec m)/^\w+$/singlesingle
[abc]Un des caractères listés/[aeiou]/rhythm and bluesa
[^abc]Tout caractère non listé/[^0-9]+/2026-10-18-
* + ?0 ou plus, 1 ou plus, 0 ou 1/colou?r/color colourcolor
{n,m}Entre n et m fois/\d{2,4}/7 42 1999 12345642
(…)Groupe capturant/(\d+)px/width: 320px320px
(?<name>…)Groupe capturant nommé/(?<h>\d\d):(?<m>\d\d)/at 09:4509:45
(?:…)Groupe non capturant/(?:ab)+/ababab!ababab
a|bL’un ou l’autre côté/cat|dog/hotdogdog
\bLimite de mot/\bcat\b/concat catcat
(?=…)Suivi de (lookahead)/\d+(?=%)/50 of 75%75
(?<!…)Non précédé de (lookbehind négatif)/(?<!\$)\b\d+/$30 or 4040
\p{L}Toute lettre Unicode (nécessite u)/\p{L}+/unaïve 東京naïve

Les six drapeaux et leur effet

g (global) trouve toutes les correspondances au lieu de s'arrêter à la première ; sans lui, la liste ne contient qu'une entrée. i ignore la casse. m (multiligne) fait correspondre ^ et $ au début et à la fin de chaque ligne plutôt qu'à ceux de l'ensemble du texte, ce qui convient pour un motif comme les espaces en fin de ligne. s (dotAll, ajouté dans ES2018) permet à . de correspondre aussi aux sauts de ligne. u (unicode) traite le texte comme des points de code : un emoji compte donc pour un seul caractère, et les échappements de propriété comme \p{L} (n'importe quelle lettre, dans n'importe quelle écriture) deviennent disponibles. y (sticky) ne trouve une correspondance qu'exactement à la position courante, le mode qu'utilisent les analyseurs lexicaux. JavaScript propose aussi d pour les indices de correspondance et v pour les opérations sur les ensembles dans les classes ; ce testeur se limite aux six ci-dessus.

Sous le texte de test, chaque correspondance affiche son index et ses groupes. Les groupes numérotés viennent des parenthèses simples, (?:…) regroupe sans capturer, et (?<year>\d{4}) crée un groupe nommé qui apparaît sous son nom, comme le montre l'exemple de date ISO. Le menu Motifs courants insère des points de départ testés pour les adresses e-mail, les URL, les adresses IPv4, les couleurs hexadécimales, les UUID, les mots répétés et les espaces en fin de ligne. Considérez le motif d'e-mail comme un simple contrôle de cohérence, pas comme une validation : la grammaire complète des adresses est bien plus permissive, et le seul vrai test est l'envoi d'un message.

Lookbehind et retour arrière catastrophique

Les assertions de position (lookarounds) testent ce qui entoure une position sans le consommer. L'assertion avant (lookahead), (?=…) et (?!…), fait partie de JavaScript depuis toujours ; l'assertion arrière (lookbehind), (?<=…) et (?<!…), est arrivée dans ES2018 et a gagné tous les grands navigateurs quand Safari 16.4 l'a prise en charge en 2023. Ainsi, (?<=\$)\d+ trouve 42 dans « $42 » sans inclure le signe dollar. Contrairement à beaucoup d'autres moteurs, JavaScript autorise un lookbehind de longueur quelconque.

Le moteur JavaScript fonctionne par retour sur trace (backtracking) : quand un chemin échoue, il revient en arrière et essaie les alternatives. Des quantificateurs imbriqués comme (a+)+$ lui donnent un nombre exponentiel de façons de découper le même texte : une chaîne de 30 a suivie d'un x peut prendre des secondes, et quelques lettres de plus des heures. C'est le backtracking catastrophique, qui devient ReDoS (déni de service) sur les serveurs ; une seule règle WAF présentant ce défaut a mis hors service le réseau de Cloudflare pendant environ une demi-heure le 2 juillet 2019. Comme ce testeur s'exécute dans votre onglet, un tel motif peut figer la page ; rechargez-la et réécrivez le motif pour que deux quantificateurs ne puissent jamais réclamer les mêmes caractères, avec des classes plus strictes comme [^,]* au lieu de .*, ou des ancres. Pour modifier le texte lui-même plutôt que le rechercher, consultez les outils de texte ; d'autres utilitaires pour développeurs se trouvent dans la page outils pour développeurs.

Questions fréquentes

Pourquoi ma regex ne trouve-t-elle qu'une seule correspondance ?
Le drapeau g est désactivé. Sans lui, le moteur s'arrête après la première correspondance. Cochez g pour lister toutes les occurrences ; le drapeau y seul en trouve aussi plusieurs, mais uniquement lorsqu'elles se suivent directement.
En JavaScript, \d reconnaît-il les chiffres d'autres systèmes d'écriture ?
Non. En JavaScript, \d désigne uniquement 0 à 9 et \w uniquement les lettres ASCII, les chiffres et le tiret bas, même avec le drapeau u. Utilisez \p{Nd} ou \p{L} avec u pour les autres écritures.
Un motif testé ici se comportera-t-il de la même façon en Python ou en PHP ?
La syntaxe de base est reprise, mais les détails diffèrent : les groupes nommés de Python s'écrivent (?P<name>…), PHP et Python gèrent des quantificateurs possessifs absents de JavaScript, et les règles du lookbehind varient. Testez de nouveau dans le moteur cible.
Comment faire correspondre un point ou un crochet littéral ?
Échappez-le avec une barre oblique inverse : \. correspond à un point et \[ à un crochet ouvrant. Dans une classe de caractères, la plupart des symboles sont déjà littéraux, donc [.] ne correspond lui aussi qu'à un point.
Pourquoi la page s'est-elle figée pendant que je tapais un motif ?
Le motif a probablement provoqué un backtracking catastrophique sur votre texte. Rechargez la page, puis évitez les quantificateurs imbriqués comme (.*)* ou (a+)+ et faites en sorte que chaque partie corresponde au moins de caractères possible.