Python在Javascript中的%s等效?

时间:2018-05-28 17:04:21

标签: javascript node.js

我在过去几年中使用Python后正在学习NodeJS。

在Python中,我能够使用动态参数在JSON中保存字符串,并在加载字符串后设置它们,例如:

我的JSON:

j = {
"dynamicText": "Hello %s, how are you?"
}

然后使用我的字符串:

print(j['dynamicText'] % ("Dan"))

因此Python将%s替换为" Dan"。

我正在寻找JS等价物,但找不到。有什么想法吗?

**忘记提及:我想将JSON保存为另一个配置文件,因此文字不会在这里工作

5 个答案:

答案 0 :(得分:4)

JavaScript中没有预定义的方式,但您仍然可以实现类似下面的内容。我在现有的应用程序中所做的。

function formatString(str, ...params) {
    for (let i = 0; i < params.length; i++) {
        var reg = new RegExp("\\{" + i + "\\}", "gm");
        str = str.replace(reg, params[i]);
    }
    return str;
}

现在formatString('You have {0} cars and {1} bikes', 'two', 'three')返回'You have two cars and three bikes'

这样,如果{0}在String中重复,它将替换所有。

喜欢formatString('You have {0} cars, {1} bikes and {0} jeeps', 'two', 'three')"You have two cars, three bikes and two jeeps"

希望这有帮助。

答案 1 :(得分:2)

使用模板文字。这是比较新的,可能不支持古老的浏览器

&#13;
&#13;
var test = "Dan"
var j = {
  "dynamicText": `Hello ${test}, how are you?`
}

console.log(j["dynamicText"])
&#13;
&#13;
&#13;

或者你可以创建一个函数,在函数内部使用string.replace方法用新单词替换单词

&#13;
&#13;
var test = "Dan"
var j = {
  "dynamicText": "Hello %s, how are you?"
}

function replace(toReplaceText, replaceWith) {
  let objText = j["dynamicText"].replace(toReplaceText, replaceWith);
  return objText;
}


console.log(replace('%s', test))
&#13;
&#13;
&#13;

答案 2 :(得分:1)

您可以使用regex和String.replace方法编写String.format方法:

String.prototype.format = function() {
    var args = arguments;
    return this.replace(/{(\d+)}/g, (match, p1) => {
        var i = parseInt(p1);
        return typeof args[i] != 'undefined' ? args[i] : match;
    });
}

之后,运行:

console.log("{0}{1}".format("John", "Doe"));

将输出:John Doe

当然,如果你不喜欢编辑你不拥有的对象原型(这通常是一种好习惯),你可以创建一个函数:

var format = function(str) {
    var args = arguments;
    return str.replace(/{(\d+)}/g, (match, p1) => {
        var i = parseInt(p1);
        return typeof args[i+1] != 'undefined' ? args[i+1] : match;
    });
}

答案 3 :(得分:0)

对于一些不错的选择,您可能需要查看JavaScript equivalent to printf/string.format

虽然它要求JS的类似C printf()的等价物,但答案也适用于你的问题,因为Python格式的字符串受C的启发。

答案 4 :(得分:0)

我找到了一个很棒的npm模块,可以完全满足我的需求 - string-format

String-Format in NPM