L'essentiel en une minute
La plupart des caractères se trouvent eux-mêmes : chat trouve les lettres c, h, a, t dans cet ordre, n'importe où dans le texte, y compris à l'intérieur de rachat. Quelques caractères ont un sens spécial : . ^ $ * + ? ( ) [ ] { } | et la barre oblique inverse. Pour en chercher un tel quel, placez une barre oblique inverse devant : \. trouve un vrai point et \$ un signe dollar.
Les exemples suivent la syntaxe JavaScript, celle qu'exécutent les navigateurs, Node.js et le testeur de cette page. Python, PHP (PCRE), Java et .NET en partagent presque tout ; les différences portent surtout sur le lookbehind, la syntaxe des groupes nommés et quelques échappements. Tapez un modèle dans Expression régulière sans les barres obliques autour, collez du texte dans Texte de test, et chaque correspondance est surlignée.
Essayez ici : Testeur de regex
Ouvrir la page complète de l'outilCaractères et classes
Une classe de caractères trouve un seul caractère parmi un ensemble. [aeiou] trouve une voyelle, [a-z] une lettre minuscule ASCII, [^0-9] tout ce qui n'est pas un chiffre. Entre crochets, la plupart des caractères spéciaux perdent leur sens, donc [.?] trouve un point ou un point d'interrogation. Mettez le trait d'union en premier ou en dernier si vous voulez un trait d'union littéral : [-.] ou [.-].
| Modèle | Trouve | Exemple |
|---|---|---|
| . | N'importe quel caractère sauf un retour à la ligne | c.t trouve cat, cot, c7t |
| \d | Un chiffre de 0 à 9 | \d\d trouve 42 dans Salle 42 |
| \w | Lettre, chiffre ou tiret bas (ASCII seulement) | \w+ trouve user_01 |
| \s | Espace, tabulation ou retour à la ligne | a\sb trouve a b |
| \D \W \S | L'inverse de \d, \w et \s | \D trouve le x de 4x4 |
| [abc] | Un caractère parmi a, b ou c | gr[ae]y trouve gray et grey |
| [^abc] | Tout caractère sauf a, b ou c | [^,]+ trouve le texte entre les virgules |
| \p{L} | Une lettre de n'importe quelle langue (flag u) | \p{L}+ trouve café et Straße |
| \b | Limite de mot (aucun caractère) | \bchat\b trouve chat mais pas rachat |
Quantificateurs, ancres et groupes
Les quantificateurs indiquent combien de fois l'élément qui les précède se répète. Les ancres trouvent une position, pas un caractère. Les groupes rassemblent des parties d'un modèle, capturent ce qu'elles ont trouvé et permettent de choisir entre plusieurs possibilités.
| Modèle | Signification | Exemple |
|---|---|---|
| * | 0 fois ou plus | ab*c trouve ac, abc, abbc |
| + | 1 fois ou plus | \d+ trouve 7 et 2026 |
| ? | 0 ou 1 fois (facultatif) | colou?r trouve color et colour |
| {3} | Exactement 3 fois | \d{3} trouve 555 |
| {2,4} | Entre 2 et 4 fois | \d{2,4} trouve 12, 123, 1234 |
| {2,} | 2 fois ou plus | a{2,} trouve aa et aaaa |
| *? +? ?? | Non gourmand : le moins possible | <.+?> trouve <b> et </b> séparément |
| ^ | Début du texte (ou de la ligne avec le flag m) | ^Erreur trouve Erreur seulement au début |
| $ | Fin du texte (ou de la ligne avec le flag m) | \.pdf$ trouve les noms qui finissent par .pdf |
| (abc) | Groupe capturant, réutilisable avec $1 | (\d{4})-(\d{2}) capture l'année et le mois |
| (?:abc) | Groupe sans capture | (?:ab)+ trouve ababab |
| (?<annee>\d{4}) | Groupe nommé, réutilisable avec $<annee> | Apparaît sous le nom annee dans le tableau des groupes |
| a|b | a ou b | chat|chien trouve l'un ou l'autre mot |
| (?=x) (?!x) | Suivi de x, non suivi de x | \d+(?=px) trouve 16 dans 16px |
| (?<=x) (?<!x) | Précédé de x, non précédé de x | (?<=\$)\d+ trouve 25 dans $25 |
Les flags
Les flags (ou drapeaux) changent le comportement de tout le modèle. Dans le testeur, ce sont des cases à cocher à côté du modèle ; dans du code JavaScript, ils suivent la barre oblique de fin, comme dans /chat/gi.
- g (global) : trouve toutes les correspondances au lieu de s'arrêter à la première. Indispensable pour tout remplacer.
- i (ignorer la casse) : Chat, CHAT et chat correspondent tous à chat.
- m (multiligne) : ^ et $ s'appliquent au début et à la fin de chaque ligne, pas seulement du texte entier. Utile pour les journaux (logs) et les listes.
- s (dotAll) : le point inclut aussi les retours à la ligne, donc .* peut s'étendre sur plusieurs lignes.
- u (Unicode) : active \p{L} et les autres échappements de propriété, traite les emoji et les autres caractères hors du plan de base comme un seul caractère, et refuse les échappements inconnus.
- y (sticky) : la correspondance doit commencer exactement là où la précédente s'est arrêtée. Sert surtout à écrire des analyseurs lexicaux.
Modèles testés pour l'e-mail, le téléphone et les dates
Ces modèles ont été vérifiés sur des exemples valides et non valides. Ajoutez ^ au début et $ à la fin quand vous validez un champ de saisie entier, et retirez-les quand vous cherchez à l'intérieur d'un texte plus long.
E-mail : [\w.+-]+@[\w-]+(\.[\w-]+)+ trouve marie.dupont+news@mail.example.com et a@b.co, et refuse moi@localhost parce qu'il exige un point dans le domaine. C'est le modèle E-mail sous Modèles courants dans le testeur. Aucune regex ne peut confirmer qu'une adresse existe vraiment ; pour cela, envoyez un e-mail de confirmation. La grammaire officielle des adresses (RFC 5322) autorise des formes qu'un modèle pratique devrait de toute façon refuser.
Téléphone au format international E.164 : \+[1-9]\d{6,14} trouve +14155552671 et +33612345678, le format utilisé par les API d'envoi de SMS et d'appels (un plus, l'indicatif du pays et 15 chiffres au maximum en tout). Pour les numéros français écrits à la main, 0[1-9](?:[\s.-]?\d{2}){4} trouve 06 12 34 56 78, 06.12.34.56.78 et 0612345678. Pour les numéros américains, \(?\d{3}\)?[\s.-]?\d{3}[\s.-]?\d{4} trouve (555) 123-4567, 555.123.4567 et 5551234567 ; il accepte aussi une parenthèse non fermée comme (555 123-4567, donc normalisez les numéros en ne gardant que les chiffres avant de les enregistrer. Pour trouver des numéros internationaux mélangés dans un texte, comme +44 20 7946 0958 ou +1 (555) 123-4567, utilisez le modèle Téléphone sous Modèles courants dans le testeur.
Date au format ISO AAAA-MM-JJ : \d{4}-\d{2}-\d{2} trouve tout ce qui a la forme d'une date. Une version plus stricte, (19|20)\d{2}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01]), refuse le mois 13 et le jour 00 mais accepte encore 2026-02-31. La regex vérifie la forme ; vérifiez que le jour existe avec les fonctions de date de votre langage.
Reformatez des dates avec le remplacement : cherchez (\d{4})-(\d{2})-(\d{2}), cochez Remplacer par, tapez $3/$2/$1 dans le champ à côté, et 2026-10-26 devient 26/10/2026, le format habituel en France. Avec $3.$2.$1, vous obtenez 26.10.2026, courant en Suisse et en Allemagne.
Erreurs fréquentes et comment les corriger
- Oublier d'échapper le point : example.com trouve aussi exampleXcom. Écrivez example\.com.
- Correspondance gourmande : <.+> sur <b>gras</b> trouve toute la chaîne. Utilisez la version non gourmande <.+?> ou une classe négative <[^>]+>.
- Ancres manquantes dans une validation : \d{5} accepte abc12345xyz parce qu'il y trouve cinq chiffres. Utilisez ^\d{5}$, par exemple pour un code postal français.
- Croire que \w trouve les lettres accentuées : sans le flag u, il ne couvre que A-Z, a-z, 0-9 et _. Le é de café n'est donc pas une lettre pour \w. Utilisez \p{L} avec le flag u pour les noms dans n'importe quelle langue.
- Oublier le flag g : le remplacement ne change que la première correspondance, et le testeur n'en montre qu'une.
- Quantificateurs imbriqués comme (a+)+ ou (\w+\s?)+$ : sur certains textes, ils prennent un temps exponentiel, ce qu'on appelle le retour arrière catastrophique (catastrophic backtracking). Le testeur arrête un modèle au bout de 1,5 seconde et vous le signale ; réécrivez-le pour que chaque partie ne puisse correspondre que d'une seule façon.
- Analyser du HTML ou du JSON avec une regex : correct pour une recherche rapide, peu fiable pour une vraie analyse. Utilisez un analyseur (parser) pour tout ce qui est imbriqué.
Construire un modèle pas à pas
Commencez par un morceau littéral du texte que vous cherchez, par exemple 2026-10-26, et vérifiez qu'il est trouvé. Remplacez ensuite les parties une à une par des classes : \d{4}-10-26, puis \d{4}-\d{2}-\d{2}. Après chaque modification, regardez ce qui est surligné en plus dans le texte de test, et ajoutez quelques lignes qui ne doivent pas correspondre. Un bon texte de test contient à la fois les cas voulus et les cas presque justes.
Ouvrez le tableau Correspondances pour voir la position et chaque groupe capturé de chaque correspondance. Si un groupe montre la mauvaise partie, déplacez les parenthèses. Quand le modèle fonctionne, copiez-le tel quel dans votre code : JavaScript et le testeur utilisent le même moteur, le résultat sera donc identique.