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 ?
Article publié le 18/03/2021, dernière mise à jour le 19/09/2023
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 !
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
Aucun commentaire pour l'instant