Passer au contenu principal
eLearner.app
Module 7 · Leçon 3 sur 427/32 dans le cours~12 min
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.

JS
'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

JS
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).
JS
'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

Exercice#regex.m7.l3.e1
Tentatives : 0Chargement…

Trouvez chaque nombre entier dans le texte. (Dans le replace, vous passeriez `(m) => Number(m) * 2` pour le doubler.)

Chargement de l'éditeur…
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

Exercice#regex.m7.l3.e2
Tentatives : 0Chargement…

Trouvez chaque e-mail (forme simplifiée : lettres/chiffres/points/soulignés @ domaine). De cette façon, un rappel pourrait le masquer en `***@domaine`.

Chargement de l'éditeur…
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

Exercice#regex.m7.l3.e3
Tentatives : 0Chargement…

Faites correspondre chaque mot composé de lettres dans le texte, afin qu'il puisse être transformé en majuscules via un rappel.

Chargement de l'éditeur…
Afficher l'indice

Trouvez des lettres simples avec [a-zA-Z]+.

Solution disponible après 3 tentatives