J'ai une chaîne (provenant d'ASP.NET) qui contient un ou plusieurs espaces réservés. Dans .NET J'utilise la méthode string.Format() pour remplacer les espaces réservés aux valeurs réelles:Comment remplacer les espaces réservés .NET par des valeurs réelles dans javascript?
var str = "aaa {0} bbb {1} ccc {2:0.0}";
var result = string.Format(str, new [] {1, 2, 33.123});
Maintenant, je dois faire la même chose en javascript, mais je me bats avec l'expression régulière. La fonction suivante fonctionne très bien pour les espaces réservés simples comme « {0} », mais échoue pour les plus complexes comme « {3: 0.0} »:
function FormatString(txt, args) {
for (i = 0; i < args.length; i++) {
txt = txt.replace('{' + i + '}', args[i]);
}
return txt;
}
//e.g:
FormatString("aa {0} bb {1} cc", [1, 2]);
// returns "aa 1 bb 2 cc"
Pour les espaces réservés complexes, j'ai essayé de modifier ma fonction à utiliser expressions régulières, mais jusqu'à présent, je n'ai pas réussi à trouver un RegExp qui fonctionne. Voilà ce que j'ai essayé:
function FormatString2(txt, args) {
for (i = 0; i < args.length; i++) {
txt = txt.replace(new RegExp('{' + i + '.*}'), args[i]);
}
return txt;
}
// does not work correctly, i.e:
FormatString2("aa {0:0.0} bb {1} cc", [1, 2]);
// returns "aa 1 cc" instead of "aa 1 bb 2 cc"
Les conseils comment remplacer correctement ces espaces réservés .NET en javascript (en utilisant RegExp ou non)?
Y a-t-il un moyen de retransmettre les chaînes déjà formatées? – hunter
@hunter: non malheureusement pas. Sinon je ne me battrais pas avec javascript et regexp :-) – M4N