Python';s%s在Javascript中是否等效?

Python';s%s在Javascript中是否等效?,javascript,node.js,Javascript,Node.js,在过去几年使用Python之后,我现在正在学习NodeJS 在Python中,我能够使用动态参数将字符串保存在JSON中,并在加载字符串后进行设置,例如: 我的JSON: j = { "dynamicText": "Hello %s, how are you?" } 然后像这样使用我的字符串: print(j['dynamicText'] % ("Dan")) 因此Python将%s替换为“Dan” 我正在寻找JS等价物,但找不到。有什么想法吗 **忘了提及:我想将JSON另存为一个配置文件

在过去几年使用Python之后,我现在正在学习NodeJS

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

我的JSON:

j = {
"dynamicText": "Hello %s, how are you?"
}
然后像这样使用我的字符串:

print(j['dynamicText'] % ("Dan"))
因此Python将
%s
替换为“
Dan

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


**忘了提及:我想将JSON另存为一个配置文件,这样文本在这里就不起作用了

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

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

将输出:
johndoe

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

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

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

var test=“Dan”
变量j={
“dynamicText:`Hello${test},你好吗`
}

log(j[“dynamicText”])
在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(str,…params){
for(设i=0;i
现在
formatString('您有{0}辆汽车和{1}辆自行车','两辆','三辆')
返回
'您有两辆汽车和三辆自行车'

这样,如果{0}在字符串中重复,它将替换所有

formatString('你有{0}辆车,{1}辆自行车和{0}辆吉普车,'2','3')
“你有两辆车,三辆自行车和两辆吉普车”


希望这能有所帮助。

对于一些不错的替代方案,您可能想看看


虽然它要求为JS提供一个类似C的
printf()
等价物,但答案也适用于您的问题,因为Python格式字符串的灵感来自C。

我发现了一个很棒的npm模块,它完全满足了我的需要-
字符串格式


s=>`Hello${s},你好吗?`
唯一的方法(我知道)是使用一个函数,该函数接受一个参数并返回一个对象(在本例中,使用您希望作为参数传入的名称)@ASDFGerte,谢谢,但我想将此JSON保存为单独的文件..看起来就像是
j['dynamicText'的语法糖].replace('s%','Dan')
由于某些原因,我得到了一个“格式不是函数”error@DanMonero好的,我忘了那是我使用的自定义函数。很抱歉,我现在已经修复了。是的,但是我的问题是我想分开保存这个JSON,并且没有在节点中定义变量FIRST,所以你的答案是非常不准确的,即使它在浏览器JS中是正确的。是的,我同意在节点JS中有。格式,但是你能告诉我为什么这对节点不准确吗?你的意思是这会破坏NodeJs?我的评论是针对“JavaScript中没有预定义的方式”这句话,因为Node中有预定义的方式。您的代码的工作原理是一样的,但在这种情况下,它有点像是重新发明轮子。