Developer Tools

Les expressions régulières pour débutants : des motifs qui ont vraiment du sens

Une introduction accessible à la syntaxe des regex, aux motifs courants pour la validation et la recherche, et à la façon de tester des expressions sans se prendre la tête.

7 min de lecture

Code sur un écran d'ordinateur portable

Les expressions régulières (regex) ont la réputation d'être illisibles. Mais une fois que vous en maîtrisez les briques de base, elles deviennent l'un des outils les plus puissants dans la boîte à outils d'un développeur — que ce soit pour valider des saisies utilisateur ou pour parcourir des fichiers journaux.

Qu'est-ce qu'une expression régulière ?

Une regex est un motif qui décrit un ensemble de chaînes de caractères. Vous fournissez un motif et une chaîne cible au moteur regex ; il vous indique si (et où) le motif correspond.

const pattern = /hello/i;
pattern.test("Hello World"); // true

Le drapeau /i rend la correspondance insensible à la casse. Les drapeaux se placent après le / de fermeture en JavaScript.

Les briques essentielles

Symbole Signification Exemple Correspond à
. N'importe quel caractère (sauf saut de ligne) h.t hat, hit, hot
* Zéro occurrence ou plus de l'élément précédent ab*c ac, abc, abbc
+ Une occurrence ou plus de l'élément précédent ab+c abc, abbc (pas ac)
? Zéro ou une occurrence de l'élément précédent colou?r color, colour
\d N'importe quel chiffre (0–9) \d{3} 123, 007
\w Caractère de mot (lettre, chiffre, _) \w+ hello, user_1
\s Espace blanc (espace, tabulation, saut de ligne) \s+ correspond aux espaces
^ Début de chaîne ^Hello Hello…
$ Fin de chaîne world$ …world

Les classes de caractères

Les crochets définissent un ensemble de caractères à faire correspondre :

[aeiou]     — n'importe quelle voyelle
[A-Z]       — n'importe quelle lettre majuscule
[0-9a-f]    — n'importe quel chiffre hexadécimal
[^0-9]      — tout ce qui N'EST PAS un chiffre

Groupes et alternatives

Les parenthèses regroupent des parties d'un motif, et | signifie « ou » :

(cat|dog)s?   — correspond à cat, cats, dog, dogs
(\d{3})-(\d{4}) — correspond à 555-1234 et capture chaque partie

Les groupes capturants sont utiles pour l'extraction — récupérer des numéros de téléphone, des dates ou des identifiants à partir de textes bruts.

Motifs courants du monde réel

Email (simplifié)

^[^\s@]+@[^\s@]+\.[^\s@]+$

Cela vérifie la présence de « quelque chose @ quelque chose . quelque chose » — suffisant pour une validation côté client. Pour la production, vérifiez avec un vrai contrôle de délivrabilité grâce à notre validateur d'email.

URL

https?:\/\/[^\s/$.?#].[^\s]*

Correspond aux URLs en http et https. Pour construire des URLs valides, consultez le constructeur d'URL & de chaîne de requête.

Numéro de téléphone (États-Unis)

\(?\d{3}\)?[-.\s]?\d{3}[-.\s]?\d{4}

Correspond à des formats tels que (555) 123-4567, 555.123.4567 et 555-123-4567.

Date (AAAA-MM-JJ)

\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])

Déboguer une regex

La meilleure façon d'apprendre, c'est de tester de manière interactive. Collez votre motif et un exemple de chaîne dans notre testeur de Regex — il met en surbrillance les correspondances en temps réel, affiche les groupes capturés et explique ce que fait chaque partie de votre motif.

Écrivez le motif le plus simple qui résout votre problème. Une regex trop « astucieuse » est difficile à maintenir.

Les pièges de performance

Le retour arrière catastrophique

Les quantificateurs imbriqués comme (a+)+b peuvent amener le moteur à essayer un nombre exponentiel de chemins sur une entrée qui ne correspond pas. Évitez les motifs où les mêmes caractères peuvent être pris en charge par plusieurs parties de l'expression.

L'ancrage fait gagner du temps

Si vous savez que votre motif doit correspondre à la chaîne entière, utilisez ^ et $. Sans ancres, le moteur parcourt chaque position dans la chaîne à la recherche d'une correspondance partielle.

Aide-mémoire de référence rapide

.           n'importe quel caractère
\d \D       chiffre / non-chiffre
\w \W       caractère de mot / non-mot
\s \S       espace blanc / non-espace blanc
[abc]       ensemble de caractères
[^abc]      ensemble nié
(group)     groupe capturant
(?:group)   groupe non-capturant
a{3}        exactement 3
a{2,5}      entre 2 et 5
a*? a+?     versions paresseuses (non-greedy)
(?=ahead)   anticipation positive
(?!ahead)   anticipation négative

La regex est une compétence qui se cumule. Commencez par des motifs simples, testez-les visuellement, et n'ajoutez de la complexité que lorsque c'est nécessaire. Tous les langages supportent les regex — une fois la syntaxe apprise, elle est utilisable partout.