Hinzufügen zu zippoxer
Ich verwende diese Funktion:
String.prototype.format = function () {
var a = this, b;
for (b in arguments) {
a = a.replace(/%[a-z]/, arguments[b]);
}
return a; // Make chainable
};
var s = 'Hello %s The magic number is %d.';
s.format('world!', 12); // Hello World! The magic number is 12.
Ich habe auch eine Nicht-Prototyp-Version, die ich häufiger wegen ihrer Java-ähnlichen Syntax verwende:
function format() {
var a, b, c;
a = arguments[0];
b = [];
for(c = 1; c < arguments.length; c++){
b.push(arguments[c]);
}
for (c in b) {
a = a.replace(/%[a-z]/, b[c]);
}
return a;
}
format('%d ducks, 55 %s', 12, 'cats'); // 12 ducks, 55 cats
ES 2015 aktualisiert
All die coolen neuen Funktionen in ES 2015 machen dies viel einfacher:
function format(fmt, ...args){
return fmt
.split("%%")
.reduce((aggregate, chunk, i) =>
aggregate + chunk + (args[i] || ""), "");
}
format("Hello %%! I ate %% apples today.", "World", 44);
// "Hello World, I ate 44 apples today."
Ich dachte mir, dass, da dies, wie die älteren, nicht tatsächlich analysieren die Buchstaben, könnte es ebenso gut nur ein einzelnes Token verwenden %%
. Dies hat den Vorteil, dass es offensichtlich ist und es nicht schwierig ist, eine einzige %
. Wenn Sie jedoch benötigen %%
aus irgendeinem Grund, müssten Sie es durch sich selbst ersetzen:
format("I love percentage signs! %%", "%%");
// "I love percentage signs! %%"