RegEx basique dans Drafts [réédité]
Histoire de nettoyer mes bévues courantes…
Que les choses soient claires : je ne suis pas un expert en RegEx (…en rien d’ailleurs !).
Comme pour le reste, j’apprends/me forme par une succession d’essais - échecs - corrections.
Puis, miracle, je valide… quand ça fonctionne.
Et je recommence.
Bref, ce qui suit n’est pas un cours de RegEx (…manquerait plus que ça !).
Le 14 avril, j’écrivais sur mastodon :
Bon, il est « plus que temps » que je découvre les options #RegEx dans #draftsapp et forge mes propres règles de nettoyage.
J’aurais dû ajouter l’objectif pour m’éviter des discussions dans mastodon : débarrasser mes écrits des petites scories quand je rédige sur Drafts en markdown.
Attention, un script peut en cacher un autre…
Dans le directory de Drafts se trouve de rares scripts autour du #RegEx dont…
RegEx Factory v.1.4…
Et
Run RegEx Factory, du même contributeur, RoyRogers.
- Le premier permet de « fabriquer des patterns » RegEx qui seront enregistrés dans Drafts comme des fichiers distincts avec une UUID,
- Le second (Run) de lancer précisément une pattern identifiée par son UUID.
En gros : pattern (template, maquette, recette…) est simplement un fichier texte listant une série de règles à appliquer.
Les règles sont les mailles d’un tamis numérique qui a pour but de retenir les plus grosses bévues (oubli d’espaces insécables, substitution d’apostrophes, etc. ) que je fais en tapotant.
En résumé :
- J’exécute, via Run (RegEx Factory), une liste d’instructions, liste fabriquée à l’aide de RegEx Factory v.1.4 et enregistrée comme un simple fichier texte JavaScript.
- Je peux ajouter dans cette même liste d’instructions — si besoin est — de nouvelles règles dans ce fichier ; des commentaires pour me souvenir de leur usage ; les modifier (…je ne m’en prive pas…!) ; copier/coller d’autres règles.
C’est une recette de cuisine qui s’exécute dans l’ordre de lecture, ni plus ni moins.
Et ça s’édite directement dans… Drafts !
Pensez juste à changer la syntaxe du fichier de travail des RegEx en optant pour JavaScript… La coloration syntaxique en sera grandement améliorée…
J’entends déjà des « ohhhhhhh » de déception car je ne vais pas expliquer plus avant ces deux scripts.
Pensez à récupérer l’UUID du fichier de règles (la pattern pas terne que vous aurez écrite) pour la coller dans le script de Run RegEx Factory, histoire que ce dernier sache quoi employer !
RegEx, JavaScript et instructions
J’avais donc comme projet de pondre une sorte de… balayette de table (!!) comme celles que l’on emploie pour débarrasser cette dernière des miettes à la fin d’un repas…!
Bref, un mini script bas de plafond pour corriger mes bévues dans mes textes , une sorte d’économe (…ce que d’aucuns nomment éplucheur de légumes) pour les… éplucher (à l’opposé d’un produit multifonctions).
Point.
Depuis longtemps, j’ai identifié un paquet d’erreurs que j’ai tendance à répéter (oubli des espaces insécables, etc.).
Pour mémoire, j’emploie une moulinette depuis Drafts 4 et adaptée au fil des usages.
Mais la curiosité m’a incité à jeter un œil dans cet univers du …RegEx.
Des substitutions et c’est tout !
Avertissement : ici mes relations « super experts » devraient abandonner ce billet tant la pauvreté de mon code (sic !) risque de les abasourdir !
Eh oui : mes besoins modestes ne nécessitent pas d’extraire des informations, d’ajouter une lettrine dans un paragraphe ou une espace fine avant un point d’exclamation.
J’ai lancé RegEx Factory v.1.4 pour regarder comment ça fonctionne et analysé les exemples.
Mon premier besoin (règle modifiée depuis…) était de virer mes highlights, un balisage qui me permet de stabiloter des passages à réviser en les entourant de ==
.
Pour les supprimer…
/==/gm, ‘‘
En gros, ça revient à remplacer1 ==
par rien !
C’est ici que j’ai découvert que
/gm
permettait d’effectuer ce remplacement sur la totalité du texte soumis.
La fonction utilisée est :
text = text.replace( );
Et puis j’ai continué, règle par règle, chacune enregistrée dans un fichier produit par RegEx Factory v.1.4.
Parenthèse : j’ai testé une action qui faisait appel à d’autres scripts mais cela n’était pas satisfaisant à mes yeux.
J’ai très vite fini par regrouper ces règles vérifiées dans un unique fichier, modifié les instructions du corps de l’en-tête (…francisé, changé les tags).
Ce script permet d’opérer les remplacements sur le fichier actif en premier plan (évitez de le faire sur votre pattern…!) ou, astuce, de créer un nouveau ficher…
Penser à créer deux tags différents: ça s’avère utile pour différencier le fichier source du fichier traité…!
Puis aligné ces règles de substitution entre les deux instructions idoines :
function regExReplace(text) {
et
return text;
}
À la fin, ça donne ceci :
Attention : les regex d’illustration dans ces copies d’écran étaient un premier jet et déjà corrigées depuis l’édition de ce billet…
Et pour lancer cela, une seule action…
Désolé pour cette démonstration ras des pâquerettes mais elle fait la… rue Michel…
Et c’est tout !
Rappels pratiques liés à Drafts…
Ne pas oublier de… via l’info du fichier Pattern (…et ça fonctionne pour tous les fichiers Drafts)…
- de récupérer l’UUID2 de votre pattern (cliquez en haut à droite sur UUID, Drafts le place automatiquement dans votre presse-papiers…),
- Puis de la coller dans le script de Run RegEx Factory (n’ayez pas peur, passez par Edit)
- En cas d’erreur dans votre fichier de règles3, souvenez-vous que Drafts fait du versionning et que vous pouvez revenir à une version antérieure.
- Vous pouvez ajouter ensuite cette action dans votre barre additionnelle et/ou dans le volet des actions…
Bon, là, c’est vraiment tout…!
-
Rédiger ce billet m’a permis de tester un micro bug avec
==
(corrigé depuis). Et un autre cas autour de ! avec un possible conflit (corrigé depuis en le contournant)… ↩ -
Drafts permet d’attribuer à chaque fichier une plaque d’immatriculation (l’UUID !) pour différencier chaque fichier sans se préoccuper de son contenu. ↩
-
De fait, disposer de deux scripts RUN, l’un des règles testées et approuvées liée à un fichier précis et un second script lié à un un autre fichier pour ne tester qu’une seule règle à la fois est franchement pratique. Sans oublier un fichier de texte de test sur lequel opérer… ↩