Ich habe eine Lösung, die der von Peter sehr ähnlich ist, aber sie befasst sich mit dem Zahlen- und Objektfall.
if (!String.prototype.format) {
String.prototype.format = function() {
var args;
args = arguments;
if (args.length === 1 && args[0] !== null && typeof args[0] === 'object') {
args = args[0];
}
return this.replace(/{([^}]*)}/g, function(match, key) {
return (typeof args[key] !== "undefined" ? args[key] : match);
});
};
}
Vielleicht könnte es noch besser sein, um mit allen tiefen Fällen fertig zu werden, aber für meine Bedürfnisse ist das genau richtig.
"This is an example from {name}".format({name:"Blaine"});
"This is an example from {0}".format("Blaine");
PS: Diese Funktion ist sehr nützlich, wenn Sie Übersetzungen in Vorlagen-Frameworks wie AngularJS :
<h1> {{('hello-message'|translate).format(user)}} <h1>
<h1> {{('hello-by-name'|translate).format( user ? user.name : 'You' )}} <h1>
Wo die en.json etwa so aussieht
{
"hello-message": "Hello {name}, welcome.",
"hello-by-name": "Hello {0}, welcome."
}