Passer au contenu principal
eLearner.app
Module 7 · Leçon 2 sur 426/32 dans le cours~10 min
Leçons du module (2/4)

Remplacement de base et `$1`

En JavaScript, String.prototype.replace(regex, replacement) effectue une recherche de motif et remplace chaque correspondance par la chaîne donnée. Avec le drapeau g, il remplace toutes les correspondances ; sans lui, seulement la première. replaceAll force le comportement global (et nécessite le drapeau g sur la regex).

JS
'ciao mondo'.replace(/o/g, '0'); // "cia0 m0nd0"
'Mario Rossi'.replace(/(\w+) (\w+)/, '$2 $1'); // "Rossi Mario"

Références dans la chaîne de remplacement

À l'intérieur de la chaîne de remplacement, ceux-ci sont spéciaux :

  • $1, $2, … -- référence arrière au groupe numéroté de la regex.
  • $<name> -- référence arrière au groupe nommé.
  • $& -- toute la correspondance.
  • `$`` -- texte avant la correspondance.
  • $' -- texte après la correspondance.
  • $$ -- un signe $ littéral.
JS
const data = '2024-03-15';
data.replace(/(\d{4})-(\d{2})-(\d{2})/, '$3/$2/$1');
// "15/03/2024"

Reformatez la date en inversant l'ordre. La regex comporte 3 groupes, et dans la chaîne de remplacement vous y faites référence sous les noms $1, $2, $3.

Références spéciales dans les remplacements

En plus de $1 et $2, vous pouvez utiliser $& pour insérer l'intégralité du texte correspondant, $\`` pour tout le texte précédant la correspondance, et $'` pour tout le texte qui la suit. Cela permet d'effectuer des remplacements complexes sans même écrire de code JS.

À vous de jouer

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

Trouvez chaque date au format AAAA-MM-JJ avec trois groupes (année, mois, jour). De cette façon, vous pourriez utiliser replace pour obtenir JJ/MM/AAAA.

Chargement de l'éditeur…
Afficher l'indice

Remplacez \d+ par \d{4}, \d{2}, \d{2} à l'intérieur de trois groupes capturés avec (...).

Solution disponible après 3 tentatives

Exercice de révision

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

Trouvez 'prenom nom' sous forme de deux groupes nommés `nome` et `cognome`, afin de pouvoir le réécrire sous la forme `cognome, nome` à l'aide de `$<cognome>, $<nome>`.

Chargement de l'éditeur…
Afficher l'indice

Utilisez (?<nome>\w+) et (?<cognome>\w+) séparés par \s+.

Solution disponible après 3 tentatives

Défi supplémentaire

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

Créez un motif de capture pour inverser l'ordre du prénom et du nom du format `Nom, Prénom` au format `Prénom Nom`.

Chargement de l'éditeur…
Afficher l'indice

Utilisez deux groupes de capture pour le nom et le prénom ; le remplacement sera effectué via $2 $1.

Solution disponible après 3 tentatives