Aide-mémoire des expressions régulières : syntaxe, indicateurs et motifs courants
Réponse rapide
Une expression régulière combine des caractères littéraux, des métacaractères (., \d, \w, \s), des quantificateurs (*, +, ?, {n,m}), des ancres (^, $, \b) et des groupes ((...), [...]). Les indicateurs comme g (global), i (insensible à la casse), m (multiligne) modifient le comportement de correspondance. Testez les modèles en direct avec notre Regex Tester avant de les intégrer dans le code.
Introduction
Les expressions régulières (regex) décrivent des modèles de texte à l'aide d'un langage formel compact. Ils sont pris en charge par tous les langages de programmation, éditeurs et outils de recherche modernes. Cette aide-mémoire est une référence pour la syntaxe définie par ECMAScript (utilisée par JavaScript) ainsi que pour les modèles courants que vous pouvez copier et adapter. Utilisez notre testeur Regex pour essayer n'importe quel modèle par rapport à un exemple de texte dans votre navigateur.
Pas à pas
-
Classes de caractères : correspondent à un ensemble de caractères
[abc] correspond à a, b ou c. [^abc] correspond à tout sauf a, b, c. [a-z] correspond à n'importe quelle lettre minuscule. Classes prédéfinies : \d = [0-9], \D = non-chiffre, \w = [A-Za-z0-9_], \W = non-mot, \s = espace, \S = non-espace, . = n'importe quel caractère sauf la nouvelle ligne (utilisez l'indicateur s pour inclure la nouvelle ligne).
-
Quantificateurs : combien de fois répéter
* = 0 ou plus. + = 1 ou plus. ? = 0 ou 1. {n} = exactement n. {n,} = au moins n. {n,m} = entre n et m. Ajouter ? pour une correspondance paresseuse (par exemple, *? correspond le moins possible). Greedy est la valeur par défaut et peut provoquer un retour en arrière catastrophique sur les modèles imbriqués.
-
Ancres et limites : où les faire correspondre
^ correspond au début de la chaîne (ou de la ligne avec l'indicateur m). $ correspond à la fin. \b correspond à une limite de mot (entre \w et \W). \B correspond à une non-limite de mot. Les ancres ont une largeur nulle : elles testent la position sans consommer de caractères.
-
Groupes et alternance
(abc) est un groupe de capture ; utilisez 1 $, 2 $ en remplacement. (?:abc) est un groupe sans capture. (?=abc) est une anticipation (affirme ce qui suit). (?!abc) est une prévision négative. (?<=abc) est un lookbehind (ES2018+). a|b est l'alternance (a ou b).
-
Indicateurs : modifier le comportement de correspondance
g = global (trouver toutes les correspondances, pas seulement la première). i = insensible à la casse. m = multiligne (^ et $ correspondent aux limites des lignes). s = dotAll (. correspond à la nouvelle ligne). u = unicode (traitez le motif comme des points de code Unicode ; nécessaire pour les caractères emoji et astraux). y = collant (correspondance à lastIndex uniquement).
Exemples
Faire correspondre une adresse email (pratique, RFC 5322 simplifié)
Saisir: Pattern: /^[^\s@]+@[^\s@]+\.[^\s@]+$/
Sortir: Correspond à « [email protected] » et « [email protected] », mais pas à « plainaddress » ou « @no-user.com ».
Extrayez tous les codes de couleur hexadécimaux de CSS
Saisir: Pattern: /#[0-9a-fA-F]{3,8}\b/g
Sortir: In 'color: #fff; background: #1a2b3c4d' finds ['#fff', '#1a2b3c4d']
Valider une date ISO 8601 (AAAA-MM-JJ)
Saisir: Pattern: /^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$/
Sortir: Correspond au '2026-08-28' mais rejette '2026-13-01' et '2026-02-31'
Remplacez les chiffres par # à l'aide d'un groupe de capture
Saisir: 'Commande 42 expédiée' remplacée par /(\d+)/g →'#$1'
Sortir: « Commande n°42 expédiée »
Problèmes courants
- Quantificateurs gourmands correspondant trop : '<.*>' sur '<a><b>' correspond à la chaîne entière '<a><b>' au lieu de '<a>'. Utilisez '<.*?>' (paresseux) pour faire correspondre '<a>' en premier.
- Retour en arrière catastrophique : quantificateurs imbriqués comme (a+)+b sur l'entrée 'aaaaaaaaaaaaaaaa !' peut prendre un temps exponentiel. Réécrivez le modèle ou utilisez des groupes atomiques/quantificateurs possessifs lorsque cela est pris en charge.
- Oublier le drapeau u pour Unicode : /^.$/ correspond à une seule unité de code, donc les emoji comme '😀' (deux unités de code) échouent sans le drapeau u. Ajoutez-vous toujours lorsque vous faites correspondre des caractères astraux.
- Confondre \b (limite du mot) avec \s (espace) : \b correspond entre un mot et un caractère autre qu'un mot, donc cela fonctionne également au début/à la fin de la chaîne. \s correspond uniquement aux caractères d'espacement réels.
Conseils
- Testez toujours les expressions régulières avec des échantillons correspondants et non correspondants dans notre testeur Regex avant de l'intégrer dans le code de production : les cas extrêmes sont faciles à manquer.
- Préférez les classes de caractères [a-z] à l'alternance (a|b|...|z) pour les caractères uniques : les classes sont plus rapides et plus claires.
- Utilisez des groupes sans capture (?:...) lorsque vous n'avez pas besoin de la valeur capturée : la capture a un faible coût en performances et encombre le tableau de résultats.
- Compilez l'expression régulière une fois avec new RegExp() ou un littéral dans la portée du module, pas dans une boucle chaude - recompiler le même modèle à chaque itération gaspille du processeur.