Lookarounds
Regardez sans consommer — le lookahead et le lookbehind sont des assertions de largeur nulle qui vérifient ce qui vient avant ou après une position, puis reculent pour laisser la vraie correspondance continuer.
Lire les règles : Lookahead et lookbehind dans le Guide →S'entraîner : Sorcellerie regex →
Fait suite à Groupes et références arrière
Ce que vous allez apprendre
Étapes · 12
- 01Regarder sans consommerBriefing
- 02Lookahead positifChasse
- 03Lookahead sur un caractèreChasse
- 04Lookahead négatifChasse
- 05« Non suivi de »Chasse
- 06Lookbehind positifChasse
- 07Lookbehind négatifChasse
- 08Combiner les assertionsChasse
- 09Un mot de passe plus strictChasse
- 10Un mot qui ne finit PAS par sChasse
- 11Golf : q non suivi de uChasse
- 12Assertions maîtriséesBriefing
Lookahead et lookbehind dans les regex
Les lookarounds permettent à une expression régulière de vérifier le texte autour d'une position sans l'inclure dans la correspondance. Ils sont de largeur nulle, comme les ancres : la vérification réussit ou échoue, et le curseur reste où il était. Le reste du motif reprend ensuite au même endroit, comme si de rien n'était.
Un lookahead regarde vers la droite. (?=...) exige que le texte qui suit corresponde, et (?!...) exige qu'il ne corresponde pas. Un lookbehind regarde vers la gauche : (?<=...) exige que le texte qui précède corresponde, et (?<!...) qu'il ne corresponde pas. JavaScript gère les quatre, et son lookbehind peut avoir n'importe quelle longueur.
Utilisez-les quand le contexte décide de la correspondance sans devoir en faire partie : un nombre seulement s'il est suivi d'une unité, un mot seulement s'il lui manque un certain préfixe, ou plusieurs règles sur une même saisie, comme un mot de passe qui exige un chiffre et une majuscule dans n'importe quel ordre. Dans une chasse, un lookaround épargne souvent les innocents qui partagent toutes leurs lettres avec les cibles.
Exemples
Attrapés
- 12px
- 300px
- w: 8px
Épargnés
- 12em
- px12
- 12 px
Le lookahead exige
pxjuste après les chiffres, mais la correspondance elle-même n'est que le nombre.Attrapés
- #tag
- go #team
- #2026
Épargnés
- tag
- # team
- a#
Le lookbehind vérifie la présence de
#à gauche sans le garder : la correspondance est le tag seul.Attrapés
- hello
- snake_case
Épargnés
- r2d2
- top10
Le lookahead négatif parcourt d'abord tout le mot avec
.*: un chiffre n'importe où suffit à le rejeter.Attrapés
- play
- display
- player
Épargnés
- replay
- replays
Le lookbehind négatif n'épargne
playque lorsquerese trouve juste devant.
Erreurs courantes
- Oublier `. *
dans un lookahead en début de texte.^(?=\d)ne vérifie que le premier caractère ; écrivez^(?=.*\d)` pour dire qu'un chiffre apparaît n'importe où. - S'attendre à retrouver le texte inspecté dans le résultat. Un lookaround n'ajoute jamais de caractères à la correspondance : un remplacement sur
\d+(?=px)remplace le nombre et garde lepx. - Copier un lookbehind JavaScript dans un autre moteur. Le module
rede Python exige une longueur fixe dans(?<=...), et bien d'autres moteurs la limitent :(?<=\$\d*)fonctionne en JavaScript mais échoue ailleurs.
Lire les règles : Lookahead et lookbehind dans le Guide →S'entraîner : Sorcellerie regex →
À lire aussi : Lookahead et lookbehind en regex, expliqués avec des plateaux interactifs →
À lire aussi : Règles de mot de passe avec des lookaheads en regex (et quand s'en passer) →