我在过去几年中使用Python后正在学习NodeJS。
在Python中,我能够使用动态参数在JSON中保存字符串,并在加载字符串后设置它们,例如:
我的JSON:
j = {
"dynamicText": "Hello %s, how are you?"
}
然后使用我的字符串:
print(j['dynamicText'] % ("Dan"))
因此Python将%s
替换为" Dan
"。
我正在寻找JS等价物,但找不到。有什么想法吗?
**忘记提及:我想将JSON保存为另一个配置文件,因此文字不会在这里工作
答案 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)
使用模板文字。这是比较新的,可能不支持古老的浏览器
var test = "Dan"
var j = {
"dynamicText": `Hello ${test}, how are you?`
}
console.log(j["dynamicText"])
&#13;
或者你可以创建一个函数,在函数内部使用string.replace
方法用新单词替换单词
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;
答案 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
。