Lookahead et lookbehind en regex, expliqués avec des plateaux interactifs
Les lookarounds permettent à une regex de vérifier ce qui précède ou suit une position sans le consommer. Voici comment fonctionnent les quatre, où ils brillent, et quand un motif simple est plus court.

· 8 min de lecture
/q(?!u)/
à attraper
- iraq
- qatar
- qi
à épargner
- queen
- quiet
- quote
La plus grande partie d'une regex consomme du texte. cat avale trois caractères, \d+ avale tous les chiffres qu'il peut, et le moteur avance au-delà de ce qu'il a trouvé.
Les lookarounds (assertions de voisinage), non. Ils se placent à une position de la chaîne, jettent un œil en avant ou en arrière, et répondent oui ou non. Ils correspondent à zéro caractère. Cette seule idée vous permet d'exprimer ce qu'un motif simple ne peut pas dire, comme « un q qui n'est pas suivi d'un u » ou « un nombre juste après un signe dollar, sans le signe dollar ».
Tous les exemples ci-dessous sont interactifs : modifiez le motif et les lignes se mettent à jour, ou cliquez sur Essayer pour l'ouvrir dans le bac à sable.
01Les quatre lookarounds
| Syntaxe | Nom | Réussit quand… |
|---|---|---|
(?=X) |
lookahead positif | X vient ensuite |
(?!X) |
lookahead négatif | X ne vient pas ensuite |
(?<=X) |
lookbehind positif | X vient juste avant |
(?<!X) |
lookbehind négatif | X ne vient pas juste avant |
Le nom indique la direction : le lookahead (« regarder devant ») vérifie le texte après la position courante, le lookbehind (« regarder derrière ») vérifie le texte avant. = signifie « doit être là », ! signifie « ne doit pas être là ».
02Lookahead négatif : un q sans u
En anglais, q est presque toujours suivi de u. Attraper les exceptions tient en une ligne avec un lookahead négatif :
Regardez iraq. Une alternative tentante serait q[^u], « un q suivi de n'importe quoi sauf u ». Mais [^u] doit correspondre à un caractère, et le q de iraq est la dernière lettre. Le lookahead demande seulement que ce qui suit ne soit pas un u, et la fin de la chaîne n'est pas un u.
03Lookahead positif : trouver une partie, vérifier la suite
Un lookahead positif permet d'exiger un contexte sans l'inclure dans la correspondance. Ici, on veut le nombre, mais seulement quand c'est un montant en dollars :
/\d+(?= dollars)/Doit correspondre1/1
- it costs 40 dollars
Ne doit pas2/2
- 40 euros
- dollars 40
Cela compte dès que vous remplacez ou extrayez du texte. Lancez un rechercher-remplacer avec \d+(?= dollars) : vous changez le nombre, et le mot « dollars » reste exactement tel quel.
04Empiler les lookaheads : plusieurs règles à la fois
Comme les lookaheads ne déplacent pas la position, vous pouvez en placer plusieurs au même endroit. Chacun vérifie une règle différente sur toute la chaîne. C'est le contrôle de mot de passe classique : au moins un chiffre, au moins une majuscule, et huit caractères ou plus :
/^(?=.*\d)(?=.*[A-Z]).{8,}$/Doit correspondre2/2
- Hunter2024
- Regex1Hunter
Ne doit pas3/3
- hunter2024
- SHORT1
- NoDigitsHere
Lisez-le de gauche à droite : depuis le début, il y a un chiffre quelque part plus loin ; depuis ce même début, il y a une majuscule quelque part plus loin ; puis on prend 8 caractères ou plus jusqu'à la fin. L'ordre n'a pas d'importance, et c'est justement pour cela que les lookaheads battent l'écriture de toutes les combinaisons.
05Lookbehind : vérifier ce qui précède
Le lookbehind est l'image miroir. (?<=\$)\d+ trouve des chiffres juste après un signe dollar, sans le $ lui-même :
Et la forme négative trouve les nombres qui ne sont pas des prix :
/(?<!\$)\b\d+\b/Doit correspondre2/2
- 42 apples
- year 2026
Ne doit pas2/2
- costs $42
- $100
Cette dernière légende cache un vrai piège. Sans les limites de mot, (?<!\$)\d+ trouverait sans hésiter 00 dans $100, parce que les 0 ne sont pas directement après le $. Le lookbehind ne vérifie que la position où la correspondance commence : il faut donc souvent un \b ou une ancre pour fixer cette position.
06Quand les lookarounds gagnent au golf, et quand ils perdent
Au golf de regex, chaque caractère compte : mieux vaut savoir quand un lookaround se rentabilise.
Pour deux lettres dans n'importe quel ordre, une simple alternance est plus courte : a.*e|e.*a fait 9 caractères, et (?=.*a).*e en fait 10. Mais le nombre d'ordres possibles grimpe vite (2 pour deux lettres, 6 pour trois, 24 pour quatre), alors que chaque lookahead supplémentaire coûte toujours sept caractères. Voici un plateau où chaque monstre contient un a, un e et un i, dans n'importe quel ordre :
Plateaucertain · machine · relation · dialect · patience vs garden · pencil · plastic · money · violin
- tous les ordresrésout47
/a.*e.*i|a.*i.*e|e.*a.*i|e.*i.*a|i.*a.*e|i.*e.*a/ - lookaheadsrésout17
/(?=.*a)(?=.*e).*i/
La version à lookaheads fonctionne parce qu'une recherche regex essaie chaque position tour à tour. Dès la toute première position, les deux lookaheads parcourent le mot entier : peu importe où se trouvent le a et le e.
07À vous de jouer
Même idée, nouveau plateau. Chaque monstre contient au moins un chiffre et au moins une majuscule, dans n'importe quel ordre :
Attrapez les mots qui contiennent un chiffre et une majuscule, dans n'importe quel ordre.
Cibles · 0/5 attrapées
- Hunt3rcible
- R2d2cible
- x9Ycible
- Agent47cible
- 7Seascible
Innocents · erreurs : 0
- hunterinnocent
- r2d2innocent
- AGENTinnocent
- 1999innocent
- x9yinnocent
Tapez une regex — le plateau se met à jour en direct.
08À savoir avant de s'en servir
- Les lookarounds ont une largeur nulle.
(?=\d)tout seul correspond à une chaîne vide devant un chiffre. C'est pratique pour insérer du texte (comme des séparateurs de milliers), et déroutant quand vous pensiez trouver le chiffre lui-même. - La prise en charge varie. JavaScript (tous les navigateurs modernes et Node), Python, Java, .NET et PCRE prennent tous en charge le lookahead et le lookbehind. Le module intégré
rede Python n'autorise que les lookbehinds de largeur fixe :(?<=\$\d*)y est une erreur, alors que JavaScript l'accepte. Le paquet standardregexpde Go ne prend en charge aucun lookaround. - Préférez le motif simple quand il est clair.
q[^u]|q$fonctionne aussi, et certains le trouvent plus facile à suivre. Utilisez un lookaround quand il rend l'intention évidente ou qu'il évite une vraie complexité.
09Continuez à vous entraîner
- Le Guide des regex propose un aide-mémoire avec d'autres exemples interactifs.
- Les lookarounds apparaissent sur les plateaux du jour les plus durs. La chasse du jour en demande peut-être un.