Aller au contenu
TextArray

Aide-mémoire Regex

Les expressions régulières sont suffisamment compactes pour que la syntaxe soit plus facile à rechercher qu'à mémoriser. Cette page représente l'intégralité de la page sur un seul écran : classes, quantificateurs, ancres, groupes, recherche, échappement et indicateurs – avec un exemple fonctionnel pour chaque ligne.

La saveur est JavaScript, c'est ce qui s'exécute dans votre navigateur et ce que le testeur d'expressions régulières de ce site utilise. La plupart sont identiques en Python, Java, Go et PCRE ; là où les saveurs divergent, elles divergent sur les bords - prise en charge de la recherche derrière, syntaxe de groupe nommé et si \d signifie "chiffre ASCII" ou "n'importe quel chiffre Unicode".

Deux choses expliquent la plupart des surprises. Les quantificateurs sont gourmands : ils prennent tout ce qu'ils peuvent et ne le rendent que lorsque le reste du modèle échoue, c'est pourquoi <.+> avale deux balises et <.+?> ne le fait pas. Et l'alternance est la plus lâche de toutes, donc ^a|b$ signifie "commence par a ou se termine par b" - ce n'est pas ce que la plupart des gens veulent lorsqu'ils l'écrivent.

Classes de personnages

Les raccourcis sont uniquement en ASCII, sauf si vous ajoutez l'indicateur u et utilisez les échappements de propriété Unicode.

SyntaxeSignificationExemple
.N'importe quel caractère sauf un saut de ligneAjoutez le drapeau s pour qu'il corresponde également aux nouvelles lignes./a.c/"abc" → "abc"
\dUn chiffre, 0 à 9/\d+/"order 42" → "42"
\DTout ce qui n'est pas un chiffre/\D+/"42abc" → "abc"
\wLettre, chiffre ou trait de soulignementASCII uniquement — "é" n'est pas \w./\w+/"user_1!" → "user_1"
\WTout ce qui est \w ne correspond pas/\W+/"a++b" → "++"
\sTout espace, y compris les tabulations et les nouvelles lignes/\s+/"a \t b" → " \t "
\STout caractère autre qu'un espace/\S+/" hi" → "hi"
[abc]L'un des personnages répertoriés/[aeiou]/"rhythm and" → "a"
[^abc]N'importe quel personnage sauf ceux répertoriés/[^aeiou ]+/"aeiou xyz" → "xyz"
[a-z]Une gamme de personnages/[a-f]+/"zzabcz" → "abc"
\p{L}Toute lettre Unicode (nécessite le drapeau u)/\p{L}+/"42 café" → "café"

Quantificateurs

Tous ces éléments sont gourmands par défaut : ils prennent autant qu’ils peuvent et ne rendent que si le reste du modèle échoue.

SyntaxeSignificationExemple
*Zéro ou plus/ab*/"a" → "a"
+Un ou plusieurs/ab+/"abbb" → "abbb"
?Zéro ou un – le rend facultatif/colou?r/"color" → "color"
{3}Exactement trois/\d{3}/"id 12345" → "123"
{2,}Deux ou plus/a{2,}/"aaa" → "aaa"
{2,4}Entre deux et quatre/a{2,4}/"aaaaa" → "aaaa"
*?Paresseux – prend le moins possibleLe gourmand <.+> avalerait les deux balises./<.+?>/"<a><b>" → "<a>"

Ancres et limites

Ceux-ci correspondent à une position, pas à un personnage, ils ne consomment donc rien.

SyntaxeSignificationExemple
^Début de chaîne, ou d'une ligne avec le drapeau m/^a/"abc" → "a"
$Fin de chaîne, ou d'une ligne avec le drapeau m/c$/"abc" → "c"
\bUne limite de motsC'est ce qui empêche la correspondance de "cat" à l'intérieur de "concaténer"./\bcat\b/"the cat sat" → "cat"
\BPas une limite de mot/\Bcat/"concatenate" → "cat"

Groupes et alternance

SyntaxeSignificationExemple
(abc)Groupe de capture - mémorisé pour remplacement/(\d+)-(\d+)/"10-20" → "10-20"
(?:abc)Regrouper sans capturerUtilisez-le lorsque vous n'avez besoin que du regroupement ; cela permet de garder les chiffres de capture significatifs./(?:ab)+/"abab" → "abab"
(?<name>…)Groupe de capture nommé/(?<year>\d{4})/"in 2026" → "2026"
a|bDe chaque côté – alternanceL'alternance a la priorité la plus basse : ^a|b$ est "^a" ou "b$", et non "^(a|b)$"./cat|dog/"one dog" → "dog"
\1Retour en référence au premier groupe/(\w)\1/"letter" → "tt"

Lookaround

Affirmations sur ce qui entoure un poste. Ils ne correspondent à rien eux-mêmes, ce qui les rend sûrs à combiner.

SyntaxeSignificationExemple
(?=…)Lookahead - suivi de ceci/\d+(?= kg)/"80 kg" → "80"
(?!…)Anticipation négative – non suivie de ceci/\d+(?! kg)/"80 lb" → "80"
(?<=…)Lookbehind - précédé de ceci/(?<=\$)\d+/"costs $40" → "40"
(?<!…)Lookbehind négatif - non précédé de ceci/(?<!\$)\b\d+/"about 40" → "40"

S'échapper

Ces douze caractères sont ceux qui nécessitent une barre oblique inverse pour être pris au pied de la lettre.

SyntaxeSignificationExemple
\.Un point littéral/\d\.\d/"v2.5" → "2.5"
\\Une barre oblique inverse littérale/\\/"C:\\dir" → "\\"
\nUn saut de ligne/a\nb/"a\nb" → "a\nb"
\tUn onglet/a\tb/"a\tb" → "a\tb"
\uFFFFUn personnage par son point de code/\u00e9/"café" → "é"

Drapeaux

DrapeauNomSignification
gMondialTrouvez chaque correspondance, pas seulement la première.
iIgnorer le casCorrespondance indépendamment des majuscules ou des minuscules.
mMultiligneFait correspondre ^ et $ à chaque saut de ligne au lieu de seulement aux extrémités de la chaîne.
sPointez toutPermettons. faire correspondre les sauts de ligne également.
uUnicodeTraite le modèle comme des points de code et active les échappements de propriété \p{…}.
yCollantCorrespond uniquement à lastIndex exactement, sans jamais chercher en avant.

FAQ

Quelle est la différence entre les quantificateurs gourmands et paresseux ?
Les quantificateurs gourmands (*, +, {2,}) correspondent autant que possible et ne renvoient les caractères que lorsque le reste du modèle ne peut pas correspondre. Ajouter ? les rend paresseux : ils correspondent le moins possible et n'en prennent plus que lorsqu'ils sont forcés. Sur "<a><b>", le modèle <.+> renvoie la chaîne entière et <.+?> renvoie juste <a>.
Pourquoi mon mot correspond-il à d’autres mots ?
Parce que rien ne l'a ancré. Enveloppez le mot dans \b — /\bcat\b/ correspond à "cat" dans "le chat assis" mais pas à l'intérieur de "concaténer". \b correspond à une position entre un caractère de mot et un caractère autre qu'un mot, donc il ne consomme rien.
Qu'est-ce que le drapeau u change ?
Cela fait fonctionner le modèle sur des points de code plutôt que sur des unités UTF-16, de sorte qu'un seul emoji compte pour un caractère, et il permet des échappements de propriété \p{…} tels que \p{L} pour "n'importe quelle lettre". Sans cela, \w et \d restent uniquement en ASCII, c'est pourquoi "café" ne correspond pas entièrement à /\w+/.
Quand dois-je utiliser un groupe sans capture ?
Chaque fois que vous avez besoin du regroupement mais pas du texte capturé — (?:ab)+ au lieu de (ab)+. Les captures coûtent un peu en termes de performances, mais la vraie raison est la numérotation : chaque groupe de capture que vous ajoutez décale les numéros de ceux qui le suivent, interrompant discrètement les remplacements qui utilisent 1 $ et 2 $.
L'utilisation de lookbehind est-elle sûre ?
Dans les navigateurs actuels et Node, oui — (?<=…) et (?<!…) sont pris en charge sur tous les principaux moteurs depuis 2018. Safari a été le dernier à l'ajouter. Si vous ciblez des environnements d'exécution très anciens, vérifiez d'abord ; il n'y a pas de polyfill pour la syntaxe regex.