Bonjour,

J'utilise un bout de code pour le remplacement de "Tags" par des valeurs dans des Strings
Mon soucis c'est que ca ne change que le premier Tag rencontré pas si il existe plusieurs fois

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
const replaceTagsToValue = (obj, chaine) => obj.reduce((f, s) => `${f}`.replace(Object.keys(s)[0], s[Object.keys(s)[0]]), chaine)
 
const Tags = [
    { "{info_1}": "One" },
    { "{info_2}": "Two" },
    { "{info_3}": "Three" }
    // etc etc...
]
 
let input = "{info_1}-{info_2}-{info_3} | {info_3}-{info_2}-{info_1}";
let output = replaceTagsToValue(Tags, input);
console.log(output);
Resultat:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
One-Two-Three | {info_3}-{info_2}-{info_1}
Resultat Attendu:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
One-Two-Three | One-Two-Three
j'ai testé avec l'ajout d'une approche regex global, sans succès bien sur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
const replaceTagsToValue = (obj, chaine) => obj.reduce((f, s) => `${f}`.replace(/Object.keys(s)[0]/g, s[Object.keys(s)[0]]), chaine)
Avez vous une solution ? voir une solution plus adaptée et plus generique ?

Merci !

EDIT: Probleme auto-réglé par le changement de la routine de remplacement en utilisant cette fois la syntaxe correcte pour le RegEx:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
const replaceAllTagsToValue = (obj, chaine) => obj.reduce((f, s) => `${f}`.replace(new RegExp(Object.keys(s)[0],'g'), s[Object.keys(s)[0]]), chaine)
Mais si vous avez mieux, je reste preneur
AD