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.
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.