Leçons du module (3/4)
Remplacement avec callback
Si une chaîne de remplacement ne suffit pas, passez une fonction :
str.replace(regex, (match, ...groups) => string). Le rappel (callback) est invoqué pour chaque correspondance et sa valeur de retour devient le remplacement.
'prezzi: 10 20 30'.replace(/\d+/g, (m) => Number(m) * 1.22);
// "prezzi: 12.2 24.4 36.6" (22% de TVA)Arguments de la fonction de rappel
str.replace(regex, (match, p1, p2, ..., offset, original, groups) => ...);match-- la correspondance entière.p1,p2, … -- les groupes capturés dans l'ordre.offset-- index de la correspondance dans la chaîne d'origine.original-- toute la chaîne.groups-- objet contenant les groupes nommés (s'il y en a).
'2024-03-15'.replace(/(\d{4})-(\d{2})-(\d{2})/, (_, a, m, g) => `${g}/${m}/${a}`);
// "15/03/2024"Le rappel vous donne un pouvoir absolu : analyse, recherche, conversion, échappement HTML… tout ce qu'une chaîne statique ne peut pas faire.
Arguments avancés dans les rappels de replace
La fonction de rappel reçoit plusieurs arguments : la correspondance complète, chaque groupe capturé, la position de la correspondance dans l'ensemble du texte et la chaîne d'entrée d'origine. Cela permet d'implémenter une logique de transformation sophistiquée basée sur le contexte.
À vous de jouer
Trouvez chaque nombre entier dans le texte. (Dans le replace, vous passeriez `(m) => Number(m) * 2` pour le doubler.)
Afficher l'indice
Utilisez \d+ (un ou plusieurs chiffres) pour capturer chaque entier comme une seule correspondance.
Solution disponible après 3 tentatives
Exercice de révision
Trouvez chaque e-mail (forme simplifiée : lettres/chiffres/points/soulignés @ domaine). De cette façon, un rappel pourrait le masquer en `***@domaine`.
Afficher l'indice
Élargissez la classe à [\w.]+ pour accepter les points dans le nom d'utilisateur et le domaine.
Solution disponible après 3 tentatives
Défi supplémentaire
Faites correspondre chaque mot composé de lettres dans le texte, afin qu'il puisse être transformé en majuscules via un rappel.
Afficher l'indice
Trouvez des lettres simples avec [a-zA-Z]+.
Solution disponible après 3 tentatives