Aller au contenu

3 conseils pour mieux écrire tes regex !

Antoine Brisset
Antoine Brisset
Temps de lecture : 3 min
3 conseils pour mieux écrire tes regex !

Table des matières

Il y a quelques semaines, je suis retombé sur cet excellent article de ZeNobral sur les expressions régulières.

Même 4 ans après sa parution (et même à l'heure de ChatGPT !), je le trouve toujours aussi intéressant à lire.

Aujourd'hui, j'aimerais moi aussi te donner 3 conseils pour progresser dans l'écriture des regex.

Utiliser les groupes non capturants : (?:)

Généralement, quand on veut grouper plusieurs éléments, on utilise les parenthèses.

Exemple : l'expression (apple|samsung|huawei) va matcher à la fois "apple", "samsung" et "huawei".

Le problème, c'est que l'expression entre parenthèses est automatiquement assignée à une variable : elle est dite "capturée".

Or, on n'a pas toujours besoin de capturer ce qui est entre parenthèses.

Et pour faire en sorte de ne pas capturer, il faut utiliser (?:).

J'avais d'ailleurs donné un exemple concret sur Twitter l'année dernière, dans un thread sur la fonction Google Sheets REGEXEXTRACT.

Je le remets ici.

Pour bien voir la différence entre capturant et non capturant, voici ce que ça donne sur l'outil Rubular ⤵️

Groupe capturant
Groupe non capturant

Utiliser "tout sauf" : [^]

Quand on débute avec les expressions régulières, le réflexe, c'est d'utiliser .* à toutes les sauces.

Pour rappel, .* signifie n'importe quel caractère, avec une répétition de 0, 1 ou plusieurs fois.

Or, en réalité on a rarement besoin de viser aussi large. Bien souvent même, ça crée des problèmes.

Je te conseille plutôt de faire l'inverse et d'utiliser sauf via le caractère ^.

Exemple :
Tu veux capturer uniquement les symboles monétaires dans la liste de prix ci-dessous :

  • 19,99
  • £20.75
  • $5

Plutôt que de bricoler une regex avec (.*), je te conseille l'expression suivante : ([^0-9.,\s]).

Ce qui signifie : je veux matcher n'importe quel caractère sauf :

  • un chiffre entre 0 et 9
  • ou un point
  • ou une virgule
  • ou un espace
Seuls les symboles sont capturés

Utiliser les assertions négatives : (?<!) et (?!)

Pour terminer, je vais te parler des assertions négatives.

Encore un mot un peu barbare pour un concept qui n'est en réalité pas si difficile à comprendre.

L'idée, c'est simplement d'indiquer qu'on ne souhaite pas qu'une chaîne de caractères soit précédée (assertion arrière négative) ou suivie (assertion arrière positive) par quelque chose.

Exemple :
Tu veux capturer uniquement les URLs ne contenant pas "www" dans la liste ci-dessous :

  • https://www.google.com
  • https://developers.google.com
  • https://cloud.google.com

Dans ce cas, tu peux utiliser l'expression rationnelle suivante : https?://\S+(?<!www).google.com.

Ce qui signifie : je veux matcher les URLs :

  • commençant par "http://" ou "https://"
  • suivi de n'importe quel caractère qui n'est pas un espace, une ou plusieurs fois
  • suivi de ".google.com" SAUF s'il est précédé de "www"
Negative lookbehind

Et voilà ! J'espère qu'avec ces quelques conseils, tu seras un peu plus à l'aise avec l'utilisation des regex 😀

Regex

Antoine Brisset Twitter

Consultant SEO depuis 2010. Je traque les clics inutiles et j'automatise les tâches répétitives pour gagner du temps dans mon quotidien de travailleur du web.


Articles Similaires

Membres Public

Comment sauvegarder ses extractions personnalisées (XPath, regex) dans Screaming Frog ?

Le tips du jour fait suite à une question très intéressante que m'a posée Christophe aka @stonetatara au sujet de Screaming Frog. La question est la suivante : est-il possible d'enregistrer une collection de requêtes XPath dans une librairie permanente, de manière à pouvoir les réutiliser à

Comment sauvegarder ses extractions personnalisées (XPath, regex) dans Screaming Frog ?
Membres Public

Les 5 regex que j'utilise le plus dans la Search Console (+BONUS)

Ah, les regex ! Chez certains SEO, elles inspirent la peur, chez d'autres la joie. Une chose est sûre : si on apprend à s'en servir correctement, elles font gagner énormément de temps ! Aujourd'hui, je te partage 5 regex que j'utilise très souvent dans

Les 5 regex que j'utilise le plus dans la Search Console (+BONUS)