Outils
Guides

Testeur d'expressions régulières

Dév

Testez vos expressions régulières JavaScript avec coloration des correspondances et groupes capturants.

100 % côté client Sans backend
Sortie
    Sur cette page

    Qu’est-ce qu’un testeur de regex ?#

    Une expression régulière est une notation compacte pour décrire des motifs dans le texte : « tout ce qui ressemble à un e-mail », « le troisième mot de chaque ligne », « tous les nombres qui ne sont pas entre guillemets ». Écrire le motif n’est que la moitié du travail — l’autre moitié consiste à voir ce qu’il renvoie réellement, sur du texte semblable au vôtre, avant de le coller dans du code de production. Un testeur de regex est la page où vous faites cela.

    Cet outil exécute votre motif contre votre texte d’exemple en temps réel, surligne chaque correspondance en place, et liste chaque groupe de capture séparément, pour que vous puissiez confirmer non seulement qu’il a matché, mais ce qu’il a capturé. Il utilise le moteur de regex JavaScript (le même que parlent déjà votre navigateur et Node), donc le comportement ici correspond à ce que fera votre code.

    Comment l’utiliser#

    1. Saisissez le Motif entre les deux marqueurs / en haut à gauche. Vous ne tapez pas les barres obliques vous-même — elles sont dessinées pour vous, comme on l’écrit dans un littéral regex en code.
    2. Saisissez les Drapeaux dans le petit champ à droite du motif. Ceux dont vous vous servirez le plus :
      • g — trouver toutes les correspondances, et non seulement la première.
      • i — insensible à la casse.
      • m^ et $ correspondent au début et à la fin de chaque ligne, et non seulement de la chaîne entière.
      • s — laisser . correspondre aussi aux retours à la ligne.
      • u — traiter le motif comme Unicode (compte pour les emoji et le non-ASCII).
    3. Collez votre Texte de test dans le champ en dessous. Utilisez un texte qui ressemble réellement à votre entrée réelle — un motif qui marche sur des exemples soignés se comporte mal souvent sur des données plus sales.
    4. Lisez l’aperçu surligné à droite : chaque correspondance est affichée en place, dans son contexte. En dessous, chaque groupe de capture est listé avec son index, le texte capturé et le décalage où il a été trouvé.

    Fonctionnalités clés#

    • Surlage en direct. Chaque correspondance est rendue en place sur le texte d’origine, donc vous voyez les frontières d’un coup d’œil — y compris le cas épineux où une correspondance enjambe un blanc.
    • Liste de capture par groupe. Index du groupe, sous-chaîne matchée et décalage de caractère, une ligne par capture. Indispensable quand un motif a trois ou quatre groupes et que vous devez savoir qui est qui.
    • Plusieurs drapeaux à la fois. Combinez librement g, i, m, s, u (par exemple giu pour global, insensible à la casse et conscient d’Unicode).
    • Alerte ReDoS. Certains motifs — typiquement les quantificateurs imbriqués comme (a+)+ — peuvent exploser de façon exponentielle sur une entrée forgée. La ligne d’état signale le motif lui-même dès qu’il matche, vous invitant à le simplifier avant qu’il ne rencontre une entrée hostile. Le contrôle lit la forme de votre motif ; il ne mesure pas la durée de la dernière exécution, et un motif véritablement catastrophique peut encore figer l’onglet — donc tenez compte de l’avertissement.
    • Borné par conception. L’entrée est plafonnée à 250 000 caractères et la liste des correspondances cesse de croître au-delà de quelques milliers d’entrées (le panneau de capture en montre les 200 premières), donc un collage accidentel d’un gros fichier ne peut pas tourner silencieusement indéfiniment.
    • Pas d’aller-retour. Motif et texte sont traités dans votre navigateur ; rien n’est envoyé nulle part.

    Exemple commenté#

    Supposons une liste de lignes de journal dont vous voulez extraire la méthode et le chemin des lignes qui commencent par un verbe HTTP. Utilisez ce motif :

    (\w+)\s+(/[\w/-]+)

    avec les drapeaux gm, et testez-le contre :

    GET /api/users
    POST /api/login
    DELETE /api/users/42
    not a log line
    PUT /api/items/3-qty

    L’outil surligne la première, la deuxième, la troisième et la cinquième ligne (la quatrième ne commence pas par un mot suivi d’un chemin). La liste de capture rapporte, pour chaque correspondance, la méthode et le chemin séparément — donc DELETE est le groupe 1 et /api/users/42 le groupe 2, et vous pouvez confirmer que le groupe chemin inclut bien le segment final -qty sur la dernière ligne.

    FAQ#

    Quelle saveur de regex est utilisée ?#

    Le moteur intégré à JavaScript — le même qu’utilisent String.prototype.match, RegExp.prototype.exec et les littéraux regex de Node. Un motif qui marche ici fonctionnera inchangé dans votre code frontend ou votre serveur Node. Ce n’est pas PCRE, RE2 ou la regex de Rust ; si vous copiez un motif depuis une base de code PHP ou Go, testez-le ici avant de vous y fier.

    L’outil avertit d’un possible ReDoS. Qu’est-ce que cela signifie ?#

    Certains motifs peuvent être amenés à tourner très longtemps sur une entrée hostile — l’exemple classique est (a+)+b matché contre une chaîne de a sans b final. Les attaquants exploitent cela pour déni de service des services fondés sur les regex. L’avertissement est une lecture statique de la forme de votre motif (quantificateurs imbriqués, alternances chevauchantes) ; il se déclenche dès qu’un tel motif produit une correspondance, pas d’après la durée de la dernière exécution. Si vous le voyez, simplifiez le motif : supprimez les quantificateurs imbriqués, ancrez-le, ou utilisez des groupes atomiques si votre moteur cible les gère.

    Pourquoi mon motif ne matche-t-il qu’une fois ?#

    Il vous manque probablement le drapeau g. Sans g, une regex JavaScript s’arrête à la première correspondance. Ajoutez g pour trouver chaque occurrence non chevauchante.

    . correspond-il aux retours à la ligne ?#

    Pas par défaut — . correspond à tout caractère sauf un terminateur de ligne. Ajoutez le drapeau s (parfois appelé « dotall ») si vous voulez que . couvre les retours à la ligne, ce qui est utile pour matcher des blocs qui incluent des coupures de ligne.