Aller au contenu

Expression régulière expliquée

Regex Explainer

Décompose une expression régulière en un arbre commenté, pour que vous lisiez ce que chaque morceau reconnaît réellement.

Décompose une expression régulière en arbre et dit ce que fait chaque morceau — chaque groupe, quantificateur, classe et assertion, imbriqués comme l'est le motif. C'est le même écran que le testeur, ouvert sur son onglet d'explication, parce que lire un motif et l'exécuter sont la même activité.

🔒 Fonctionne entièrement dans votre navigateurregexexplainlearn
Vue

Motif

//g

peut correspondre n’importe où dans la chaîne, 2 groupes de capture.

Ce que fait chaque morceau

([\w.+-]+)@([\w-]+\.[\w.-]+)Dans l’ordre

Chacun de ces éléments doit correspondre, l’un après l’autre, sans rien entre eux.

([\w.+-]+)Groupe de capture 1

Correspond au motif qu’il contient et retient le texte, accessible par `match[1]` et par `$1` dans un remplacement.

[\w.+-]+Répété +

Répète une fois ou plus, le plus possible, et ne rend du terrain que si la suite échoue.

[\w.+-]N’importe quel caractère de cet ensemble

Correspond à exactement un caractère, celui des suivants qui vient en premier dans l’entrée.

Dans une classe, `.` est un point. Il ne veut pas dire « n’importe quel caractère » ici, et l’échapper n’y change rien.

\wN’importe quel caractère de mot

Exactement `[A-Za-z0-9_]`.

C’est uniquement ASCII. Pour une expression régulière JavaScript, `é`, `한` et `ß` ne sont pas des caractères de mot, donc `\w+` ne correspond ni à un mot coréen ni à un mot accentué.

.Le caractère “.” (U+002E)

Comparé exactement, casse comprise.

+Le caractère “+” (U+002B)

Comparé exactement, casse comprise.

-Le caractère “-” (U+002D)

Comparé exactement, casse comprise.

@Le caractère “@” (U+0040)

Comparé exactement, casse comprise.

([\w-]+\.[\w.-]+)Groupe de capture 2

Correspond au motif qu’il contient et retient le texte, accessible par `match[2]` et par `$2` dans un remplacement.

[\w-]+\.[\w.-]+Dans l’ordre

Chacun de ces éléments doit correspondre, l’un après l’autre, sans rien entre eux.

[\w-]+Répété +

Répète une fois ou plus, le plus possible, et ne rend du terrain que si la suite échoue.

[\w-]N’importe quel caractère de cet ensemble

Correspond à exactement un caractère, celui des suivants qui vient en premier dans l’entrée.

\wN’importe quel caractère de mot

Exactement `[A-Za-z0-9_]`.

C’est uniquement ASCII. Pour une expression régulière JavaScript, `é`, `한` et `ß` ne sont pas des caractères de mot, donc `\w+` ne correspond ni à un mot coréen ni à un mot accentué.

-Le caractère “-” (U+002D)

Comparé exactement, casse comprise.

\.Le caractère “.” (U+002E)

Comparé exactement, casse comprise.

La barre oblique inverse est inutile ici : à cet endroit, ce caractère n’a aucune signification particulière.

[\w.-]+Répété +

Répète une fois ou plus, le plus possible, et ne rend du terrain que si la suite échoue.

[\w.-]N’importe quel caractère de cet ensemble

Correspond à exactement un caractère, celui des suivants qui vient en premier dans l’entrée.

Dans une classe, `.` est un point. Il ne veut pas dire « n’importe quel caractère » ici, et l’échapper n’y change rien.

\wN’importe quel caractère de mot

Exactement `[A-Za-z0-9_]`.

C’est uniquement ASCII. Pour une expression régulière JavaScript, `é`, `한` et `ß` ne sont pas des caractères de mot, donc `\w+` ne correspond ni à un mot coréen ni à un mot accentué.

.Le caractère “.” (U+002E)

Comparé exactement, casse comprise.

-Le caractère “-” (U+002D)

Comparé exactement, casse comprise.

Drapeaux

g — global
Trouve toutes les correspondances au lieu de s’arrêter à la première. En contrepartie, `.test()` et `.exec()` déplacent `lastIndex` entre deux appels, ce qui est la cause habituelle du « un appel sur deux échoue ».

Comment s’en servir

  1. Collez le motif dont vous avez hérité

    Celui du fichier de configuration que personne ne se souvient d'avoir écrit. Il est analysé plutôt que reconnu par motif : la décomposition suit donc la vraie structure.

  2. Descendez le long de l'arbre

    Chaque nœud montre le fragment source, ce qu'il est et ce qu'il fait. Des remarques signalent les parties qui surprennent souvent — un quantificateur imbriqué, un groupe qui capture alors qu'il n'en avait pas besoin.

  3. Passez sur Tester pour vérifier votre lecture

    Le motif est repris. Comprendre une regex et confirmer qu'elle fait ce que vous croyez sont deux étapes différentes, et la seconde est la moins chère.

Questions fréquentes

Que veut dire l'avertissement sur un quantificateur imbriqué ?

Quelque chose comme `(a+)+` donne au moteur un nombre exponentiel de façons de découper le même texte : une entrée qui ne correspond pas peut donc prendre plus longtemps que l'âge de l'univers. C'est la forme qui se cache derrière la plupart des dénis de service par expression régulière.

Pourquoi me dit-il qu'un groupe capture ?

Parce qu'un groupe capturant dont vous ne vous servez pas coûte un emplacement et décale la numérotation de ceux dont vous vous servez. `(?:…)` groupe sans capturer, ce qui garde `$1` pointé sur ce que vous vouliez.

Explique-t-il aussi les drapeaux ?

Oui, dans un panneau à part — chaque drapeau que vous avez activé, son nom et ce qu'il change. `m` et `s` méritent particulièrement d'être lus, car le nom de chacun évoque le comportement de l'autre.

À alimenter depuis

Ensuite

Ces outils acceptent ce que celui-ci produit : le résultat peut y aller directement.