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
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:
One-Two-Three | {info_3}-{info_2}-{info_1}
Resultat Attendu:
One-Two-Three | One-Two-Three
j'ai testé avec l'ajout d'une approche regex global, sans succès bien sur :
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:
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
Partager