Comment progresser dans l'écriture de RegExp ?

Créer une expression régulière est le point faible de beaucoup de développeurs, mais comment s'améliorer ?

Comment progresser dans l'écriture de RegExp ?

Une expression régulière (aussi appelée RegExp) est une séquence de caractères suivant une syntaxe bien précise et représentant un motif de recherche textuel.

Autrement dit, grâce à une RegExp, vous pouvez rechercher dans n'importe quel texte si un pattern particulier est présent.

Par exemple une chaine commençant par http:// ou https:// pour détecter un lien.

Une fois qu'une chaine de caractères correspondant au motif est trouvée, il est possible de la récupérer, de la modifier ou de la remplacer.

Le problème des expressions régulières est que la syntaxe peut faire peur et être assez compliquée à lire lorsque nous ne sommes pas trop entrainés.

Et même avec de l'entrainement, il faut quelques secondes pour comprendre le sens de /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:.[a-zA-Z0-9-]+)*$/

Et pourtant, une RegExp bien écrite peut faire la différence en terme de performance et de maintenabilité. Alors si vous avez envie de vous améliorer, voici quelques conseils :

Se motiver

C'est en forgeant que l'on devient forgeron, et bien c'est aussi en écrivant des RegExp que l'on s'améliore ; la première étape est donc de se forcer à prendre du temps pour s'essayer à cet exercice en conditions réelles.

Les deux principaux pièges sont :

  • D'aller chercher sur le net des RegExp toutes faites
  • De se tourner vers une solution d'algorithmie procédurale (à base de if, else, for, etc...) que vous connaissez déjà

Même si ce n'est pas toujours facile, et que vous allez sûrement perdre du temps les premières fois, cela fait partie de l'apprentissage du métier de développeur, et les performances seront là pour vous récompenser !

Rien en vous empêche ensuite d'aller voir ce que d'autres ont fait, je ne vous dis pas de réinventer la roue à chaque fois, mais au moins d'essayer et de ne pas tomber dans la facilité pour progresser.

Décomposer

Comme n'importe quel problème qui vous semble insurmontable, vous devez le décomposer en sous-problèmes, plus petits, et qui vous paraissent abordable à votre niveau.

Commencez à essayer de délimiter grossièrement votre modèle, à sélectionner un caractère, puis deux, puis un autre caractère spécial, et enfin d'ajouter une règle de multiplicité....

Toutes ces étapes sont réalisables en ayant simplement sous les yeux une liste des références de votre moteur de RegExp (en fonction de votre langage), et d'avoir un jeu de test pour chaque nouvelle étape.

Écrire et tester

Pour cette phase, j'ai tout simplement un outil qui me sauve la vie à chaque fois que je dois écrire une nouvelle expression régulière.

Cet outil, c'est un site gratuit qui s'appelle regex101 et qui en un seule espace de travail vous permet :

  • De choisir votre moteur de RegExp (langage)
  • D'écrire votre expression régulière
  • De la tester en direct, avec le détails des correspondances entre les chaines de tests et les motifs
  • D'avoir accès à la documentation des références

Et même d'avoir une retranscription en langage naturel du modèle de votre RegExp (en anglais). Si vous ne devez utiliser qu'un seul site de référence, c'est celui là !

Lien de la plateforme : https://regex101.com/

Jouer

Il existe aussi un jeu de mots-croisés basé sur des expressions régulières logiquement appelé "Regex Crossword" pour s'entrainer tout en s'amusant.

Je ne connaissais pas ce jeu, mais comme il m'a été recommandé plusieurs fois par les lecteurs, je vous le partage ici !

Regex Crossword
A crossword puzzle game using regular expressions. Earn achievements completing puzzle challenges. Easy tutorials for people new to regular expressions.

Et sinon

Si vous développez en Javascript, il existe un projet open-source appelé SuperExpressive qui permet de créer des expressions régulières à partir d'une API de plus haut niveau : https://github.com/francisrstokes/super-expressive

francisrstokes/super-expressive
🦜 Super Expressive is a zero-dependency JavaScript library for building regular expressions in (almost) natural language - francisrstokes/super-expressive
J'espère que cet article vous aura été utile, et à bientôt sur le blog !

Les articles les plus populaires du blog

Envie de continuer à lire des articles autour du développement web (entre autres) ? Voici la sélection des articles de mon blog les plus lus par la communauté !

Voir la sélection 🚀

Recevez les articles de la semaine par e-mail pour ne rien manquer !

S'abonner à la newsletter 📧
Mes formations disponibles 🎓  -5% inclus pour les lecteurs du blog

À propos de l'auteur

Hello, je suis Nicolas Brondin-Bernard, ingénieur web indépendant depuis 2015 passionné par le partage d'expériences et de connaissances.

Aujourd'hui je suis aussi formateur/coach pour développeurs web juniors, tu peux me contacter sur nicolas@brondin.com, sur mon site ou devenir membre de ma newsletter pour ne jamais louper le meilleur article de la semaine et être tenu au courant de mes projets !


Photo par Ryan Snaadt sur Unsplash