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);

Ответ 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"

Ответ 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>

Вывод для выше.

Старая строка = Привет, имя пользователя! Надеюсь, вам понравится ваше имя пользователя. Новая строка = Привет Чак! Надеюсь, вам понравится ваше имя пользователя.