Javascript: как получить значение в строке, представленной% s, а затем заменить значением
Я знаю, это действительно глупый вопрос.
У меня был хороший многолетний опыт работы с javascript, но эта одна вещь, кажется, пропустила мой разум, моя голова исчезла, и я не могу вспомнить, как она называется, и как я буду заниматься этим.
В основном я ищу, когда у вас есть строковая переменная, например:
var error_message = "An account already exists with the email: %s"
И вы затем каким-то образом передаете строку, и она заменяет% s.
Я, наверное, звучу очень идиотски, но я очень благодарен за помощь/напоминание!
Спасибо, ребята.
Ответы
Ответ 1
Вы просто используете метод replace
:
error_message = error_message.replace('%s', email);
Это заменит только первое событие, если вы хотите заменить несколько случаев, вы используете регулярное выражение, чтобы вы могли указать глобальный флаг (g):
error_message = error_message.replace(/%s/g, email);
Ответ 2
"Современное" решение ES6: используйте шаблонные литералы. Обратите внимание на обратные ссылки!
var email = '[email protected]';
var error_message = `An account already exists with the email: ${email}`;
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals
Ответ 3
Пожалуйста, найдите пример ниже, спасибо.
/**
* @param {String} template
* @param {String[]} values
* @return {String}
*/
function sprintf(template, values) {
return template.replace(/%s/g, function() {
return values.shift();
});
}
Пример использования:
sprintf('The quick %s %s jumps over the lazy %s', [
'brown',
'fox',
'dog'
]);
Вывести:
"The quick brown fox jumps over the lazy dog"
Ответ 4
Вы можете взглянуть на это: http://www.devbox.info/javascript-sprintf.html
Ответ 5
В JavaScript нет ничего похожего на функциональность C printf()
или PHP sprintf()
. Существует метод replace()
строкового объекта, который может быть использован для замены одной вещи другой - которая может использоваться в данном конкретном случае, но она ограничена.
Существует несколько реализаций, написанных другими, которые охватывают подмножество поведения sprintf()
.
Ответ 6
Я только что написал новую функцию для этого:
function sprint(str, o) {
if (typeof str !== "string" || typeof o !== "object") {
return;
}
var regex = /%s\(([a-zA-Z0-9_]{1,15})\)/g,
i;
if (regex.test(str)) {
str = str.replace(regex, function (found, match) {
return o[match];
});
} else {
for (i in o) {
str = str.replace(/%s/, o[i]);
}
}
return str;
}
И несколько тестов:
// Ordered Array mode
var s0 = sprint("This is %s %s call, using an %s in order", ["a", "function", "array"]);
// Ordered|Unordered Obejct Literal mode
var s1 = sprint("This is a %s(sw) function, %s(ma)! You need to %s(ch) this out...", {
ma: "mang",
sw: "sweet", //This is purposely out of order
ch: "check"
});
console.log(s0);
console.log(s1);
https://gist.github.com/mbjordan/5807011
Ответ 7
См. ниже
var error_message = "An account already exists with the email: %s"
var myNewString = error_message.replace(" %s", newdata);
Пример
<script type="text/javascript">
var visitorName = "Chuck";
var myOldString = "Hello username! I hope you enjoy your stay username.";
var myNewString = myOldString.replace("username", visitorName);
document.write("Old string = " + myOldString);
document.write("<br />New string = " + myNewString);
</script>
Вывод для выше.
Старая строка = Привет, имя пользователя! Надеюсь, вам понравится ваше имя пользователя.
Новая строка = Привет Чак! Надеюсь, вам понравится ваше имя пользователя.