⊗jsSpRERMC 127 of 294 menu

Rappel dans la méthode replace des expressions régulières JavaScript

La méthode replace peut accepter comme deuxième paramètre non seulement une chaîne, mais aussi une fonction de rappel, qui sera appliquée pour chaque correspondance trouvée. Chaque sous-chaîne trouvée par l'expression régulière sera remplacée par ce que cette fonction renverra spécifiquement pour cette sous-chaîne.

Des paramètres peuvent être passés à cette fonction : dans le premier paramètre sera placée la chaîne trouvée, dans le deuxième paramètre - la première capture, dans le troisième paramètre - la deuxième capture, et ainsi de suite - on peut faire autant de paramètres qu'il y a de groupes de capture dans l'expression régulière.

Dans l'avant-dernier paramètre sera placée la position de la correspondance trouvée, et dans le dernier - la chaîne entière sur laquelle la recherche est effectuée.

Voyons comment tout cela fonctionne à travers des exemples pratiques.

Exemple

Soit une chaîne avec des nombres :

let str = '2 3 4 5';

Remplaçons ces nombres par leurs carrés. Pour commencer, affichons simplement nos nombres un par un dans la console via la fonction de rappel :

str.replace(/\d+/g, function(match) { console.log(match); });

Notre code affichera d'abord '2', puis '3', '4' et '5'. C'est-à-dire que dans la variable match arrivent séquentiellement les chaînes trouvées par l'expression régulière.

Résolvons maintenant le problème complètement - nous allons élever match au carré et le renvoyer via return. Il en résultera que pour le 2 trouvé, 4 sera renvoyé et le 2 sera remplacé par ce 4, pour le 3 trouvé, 9 sera renvoyé et le 3 sera remplacé par ce 9 - et ainsi de suite :

let result = str.replace(/\d+/g, function (match) { return match**2; }); console.log(result); // affichera '4 9 16 25'

Exemple

Supposons maintenant que la chaîne contienne des constructions de la forme '2+3=' :

let str = '2+3= 4+5= 6+7=';

Faisons en sorte qu'après le signe égal, la somme des nombres correspondants soit insérée. C'est-à-dire que notre chaîne doit devenir :

'2+3=5 4+5=9 6+7=13'

Pour résoudre le problème, expérimentons à nouveau - décomposons le premier et le deuxième terme dans des groupes de capture séparés :

str.replace(/(\d+)\+(\d+)=/g, function (match0, match1, match2) { console.log(match0, match1, match2); });

Résolvons maintenant définitivement le problème : pour chaque sous-chaîne trouvée, additionnons les premier et deuxième groupes de capture, prenons le groupe zéro (la chaîne trouvée, par exemple '2+3='), ajoutons le résultat et renvoyons le tout via return :

let result = str.replace(/(\d+)\+(\d+)=/g, function(match0, match1, match2) { let sum = Number(match1) + Number(match2); return match0 + sum; }); console.log(result);

Problèmes pratiques

Soit la chaîne :

let str = 'aaa [2] bbb [3] ccc [12] ddd';

Trouvez les nombres entre crochets et doublez-les. C'est-à-dire que notre chaîne doit devenir :

'aaa [4] bbb [6] ccc [24] ddd'

Soit la chaîne :

let str = '123 456 789';

Trouvez tous les nombres et inversez l'ordre de leurs chiffres. C'est-à-dire que notre chaîne doit devenir :

'321 654 987'

Soit une chaîne avec des dates :

let str = '31.12.2025 30.11.2024 29.10.2023';

Trouvez toutes les dates et transformez-les dans un autre format afin d'obtenir la chaîne suivante :

'2025-12-31 2024-11-30 2023-10-29'
roidhifrbn