В дополнение к ответу zippoxer
я использую эту функцию:
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.
У меня также есть версия, не относящаяся к прототипу, которую я использую чаще всего для ее Java-подобного синтаксиса:
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 значительно облегчают эту задачу:
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."
Я подумал, что, поскольку, как и старые, это не так. Фактически, парсинг букв может быть выполнен с использованием одного токена %%
. Преимущество этого состоит в том, что он очевиден и не затрудняет использование одного %
. Однако если по какой-то причине вам нужен %%
, вам нужно заменить его на себя:
format("I love percentage signs! %%", "%%");
// "I love percentage signs! %%"
Другие обходные решения включают ОТЛИЧНЫЙ ВЫБОР использования или ПРЕДЕЛ в подзапросе, хотя они не являются столь же явными в их эффекте на материализацию. это работало на меня
MySql