Viele der oben genannten Funktionen (außer der von Julian Jelfs) enthalten den folgenden Fehler:
js> '{0} {0} {1} {2}'.format(3.14, 'a{2}bc', 'foo');
3.14 3.14 afoobc foo
Oder für die Varianten, die ab dem Ende der Argumentliste rückwärts zählen:
js> '{0} {0} {1} {2}'.format(3.14, 'a{0}bc', 'foo');
3.14 3.14 a3.14bc foo
Hier ist eine korrekte Funktion. Es ist eine prototypische Variante von Julian Jelfs 'Code, die ich etwas enger gemacht habe:
String.prototype.format = function () {
var args = arguments;
return this.replace(/\{(\d+)\}/g, function (m, n) { return args[n]; });
};
Und hier ist eine etwas fortgeschrittenere Version derselben, mit der Sie Zahnspangen entkommen können, indem Sie sie verdoppeln:
String.prototype.format = function () {
var args = arguments;
return this.replace(/\{\{|\}\}|\{(\d+)\}/g, function (m, n) {
if (m == "{{") { return "{"; }
if (m == "}}") { return "}"; }
return args[n];
});
};
Das funktioniert richtig:
js> '{0} {{0}} {{{0}}} {1} {2}'.format(3.14, 'a{2}bc', 'foo');
3.14 {0} {3.14} a{2}bc foo
Hier ist eine weitere gute Implementierung von Blair Mitchelmore mit einer Reihe netter zusätzlicher Funktionen: https://web.archive.org/web/20120315214858/http://blairmitchelmore.com/javascript/string.format