Astuces RegEx simples pour les débutants

Vous avez toujours voulu apprendre les expressions régulières mais vous avez été découragé par leur complexité? Dans cet article, je vais vous montrer cinq astuces RegEx faciles à apprendre que vous pouvez commencer à utiliser immédiatement dans votre éditeur de texte préféré.

Configuration de l'éditeur de texte

Bien que presque tous les éditeurs de texte prennent désormais en charge les expressions régulières, j'utiliserai Visual Studio Code pour ce didacticiel, mais vous pouvez utiliser n'importe quel éditeur de votre choix. Notez également que vous devez généralement activer RegEx quelque part près de l'entrée de recherche. Voici comment procéder dans VS Code:

1) . - Correspond à n'importe quel personnage

Commençons simplement. Le symbole du point .correspond à n'importe quel caractère:

b.t

Matchs au- dessus de RegEx "bot”, "bat”et tout autre mot de trois caractères qui commence par bet se termine t. Mais si vous voulez rechercher le symbole de point, vous devez l'échapper avec \, donc ce RegEx ne correspondra qu'au texte exact "b.t":

b\.t

2). * - Correspond à tout

Ici .signifie «n'importe quel caractère» et *signifie «tout ce qui se trouve avant ce symbole répété un certain nombre de fois» Ensemble ( .*), ils signifient «n'importe quel symbole un nombre de fois illimité». Vous pouvez l'utiliser, par exemple, pour rechercher des correspondances commençant par ou se terminant par du texte. Supposons que nous ayons une méthode javascript avec la signature suivante:

loadScript(scriptName: string, pathToFile: string)

Et nous voulons trouver tous les appels de cette méthode où pathToFilepointe vers n'importe quel fichier du dossier “lua”. Vous pouvez utiliser l'expression régulière suivante pour cela:

loadScript.*lua

Ce qui signifie "faire correspondre tout le texte commençant par “loadScript”suivi de tout ce qui va jusqu'à la dernière occurrence de “lua”"

3)? - Match non gourmand

Le ?symbole après .*et certaines autres séquences RegEx signifie «correspondre le moins possible». Si vous regardez l'image précédente, vous verrez que le texte “lua”est vu deux fois dans chaque match et que tout jusqu'à la seconde “lua”correspond. Si vous vouliez tout faire correspondre jusqu'à la première occurrence de à la "lua"place, vous utiliseriez le RegEx suivant:

loadScript.*?lua

Ce qui signifie, "faire correspondre tout ce qui commence par "loadScript"suivi de tout ce qui va jusqu'à la première occurrence de "lua""

4) () $ - Groupes de capture et références arrière

D'accord, nous pouvons maintenant faire correspondre du texte. Mais que faire si nous voulons changer des parties du texte que nous avons trouvées? Nous devons souvent utiliser des groupes de capture pour cela.

Supposons que nous ayons changé notre loadScriptméthode et qu'elle ait soudainement besoin d'un autre argument inséré entre ses deux arguments. Appelons ce nouvel argument id, de sorte que la nouvelle signature de la fonction devrait ressembler à ceci: loadScript(scriptName, id, pathToFile). Nous ne pouvons pas utiliser la fonction de remplacement normal de notre éditeur de texte ici, mais une expression régulière est exactement ce dont nous avons besoin.

Ci-dessus, vous pouvez voir le résultat de l'exécution de l'expression régulière suivante:

loadScript\(.*?,.*?\)

Ce qui signifie: "faire correspondre tout ce qui commence par "loadScript("suivi de tout ce qui va jusqu'au premier ,, puis suivi de tout ce qui va jusqu'au premier )"

Les seules choses qui peuvent vous paraître étranges ici sont les \symboles. Ils sont utilisés pour échapper les crochets.

Nous devons échapper des symboles (et )parce que ce sont des caractères spéciaux utilisés par RegEx pour capturer des parties du texte correspondant. Mais nous devons faire correspondre les caractères entre crochets réels.

Dans le RegEx précédent, nous avons défini deux arguments de notre appel de méthode avec les .*?symboles. Faisons de chacun de nos arguments un groupe de capture distinct en ajoutant (et des )symboles autour d'eux:

loadScript\((.*?),(.*?)\)

Si vous exécutez ce RegEx, vous verrez que rien n'a changé. C'est parce qu'il correspond au même texte. Mais maintenant nous pouvons nous référer au premier argument en tant que $1et au deuxième argument en tant que $2. Ceci est appelé backreference, et cela nous aidera à faire ce que nous voulons: ajouter un autre argument au milieu de l'appel:

Recherche d'entrée:

loadScript\((.*?),(.*?)\)

Ce qui signifie la même chose que le RegEx précédent mais mappe les arguments pour capturer les groupes 1 et 2 respectivement.

Remplacer l'entrée:

loadScript($1,id,$2)

Ce qui signifie «remplacer chaque texte correspondant par du texte “loadScript(“suivi du groupe de capture 1 “id”,, du groupe de capture 2 et )». Notez que vous n'avez pas besoin d'échapper les crochets dans l'entrée de remplacement.

5) [] - Classes de caractères

Vous pouvez lister les caractères que vous souhaitez correspondre à une position particulière en placant [et ]symboles autour de ces personnages. Par exemple, class [0-9]correspond à tous les chiffres de 0 à 9. Vous pouvez également lister tous les chiffres explicitement: [0123456789]- la signification est la même. Vous pouvez également utiliser un tiret avec des lettres, [a-z]correspondra à n'importe quel caractère latin minuscule, [A-Z]correspondra à n'importe quel caractère latin majuscule et [a-zA-Z]correspondra aux deux.

Vous pouvez également utiliser *après une classe de caractères comme après ., ce qui signifie dans ce cas: "correspond à n'importe quel nombre d'occurrences des caractères de cette classe"

Dernier mot

Vous devez savoir qu'il existe plusieurs saveurs RegEx. Celui dont j'ai discuté ici est le moteur javascript RegEx. La plupart des moteurs modernes sont similaires, mais il peut y avoir des différences. Habituellement, ces différences incluent des caractères d'échappement et des marques de références arrière.

Je vous exhorte à ouvrir votre éditeur de texte et à commencer à utiliser certaines de ces astuces dès maintenant. Vous verrez que vous pouvez désormais effectuer de nombreuses tâches de refactoring beaucoup plus rapidement qu'auparavant. Une fois que vous êtes à l'aise avec ces astuces, vous pouvez commencer à rechercher davantage sur les expressions régulières.

Merci d'avoir lu mon article jusqu'au bout. Ajoutez des applaudissements si vous l'avez trouvé utile et abonnez-vous pour plus de mises à jour. Je publierai plus d'articles sur les expressions régulières, le javascript et la programmation en général.