Javascript 如何将字符串{}值替换为obj(键值)
我最近开始在nodeJs上编程 我有不同的字符串和Json对象 例如: 我如何自动化这个过程,所以使用string和obj我将把string{}值替换为obj(键值) 我试过帕格,但无法解析Javascript 如何将字符串{}值替换为obj(键值),javascript,json,node.js,Javascript,Json,Node.js,我最近开始在nodeJs上编程 我有不同的字符串和Json对象 例如: 我如何自动化这个过程,所以使用string和obj我将把string{}值替换为obj(键值) 我试过帕格,但无法解析 pug.render(str, obj); 不适合我。让我看看,你想要做一些像模板一样的东西,就像把手一样 我将给您举一个例子,为您制作一个简单的车把: function render(template, properties) { var result = template; for
pug.render(str, obj);
不适合我。让我看看,你想要做一些像模板一样的东西,就像把手一样 我将给您举一个例子,为您制作一个简单的车把:
function render(template, properties)
{
var result = template;
for (i in properties)
{
result = result.replace("{"+i+"}",properties[i]);
}
return result;
}
但此选项只会更改各个属性的第一次出现,如果需要,可以将其用于整个模板中的“全部替换”:
function render(template, properties)
{
var result = template;
for (i in properties)
{
var reg = new RegExp("{"+i+"}","g");
result = result.replace(reg,properties[i]);
}
return result;
}
这是主题的一个变体
var str = 'My name is {name} and {name} my age is {age}.';
var obj = {name : 'xyz' , age: 24};
var render = function (str, obj) {
return Object.keys(obj).reduce((p,c) => {
return p.split("{" + c + "}").join(obj[c])
}, str)
}
render(str, obj)
我认为您不应该重新发明轮子,因为最简单的解决方案是使用一些流行的节点模块 我建议使用“SprintfJS” 在这里查看我的示例代码
const sprintfJs = require('sprintf-js')
const template = 'hello %(name)s today is %(day)s'
const data = {
name: 'xxxx',
day: 'Tuesday'
}
const formattedString = sprintfJs.sprintf(template, data)
console.log(formattedString)
这可以通过单个替换调用实现
var obj = {name : 'xyz' , age: 24};
let c_obj = {};
let wordArr = [];
const res = str.matchAll("{.*?}");
for(const match of res){
c_obj[match[0]] = obj[match[0].slice(1,-1)];
wordArr.push(match[0]);
}
let new_str = str.replace(new RegExp(wordArr.join('|'),'g'), match => c_obj[match]);
或者作为一行:
template.replace(/{(+?)}/g,(m,key)=>properties[key]| | m)
real nice,要把它收起来:-)
var obj = {name : 'xyz' , age: 24};
let c_obj = {};
let wordArr = [];
const res = str.matchAll("{.*?}");
for(const match of res){
c_obj[match[0]] = obj[match[0].slice(1,-1)];
wordArr.push(match[0]);
}
let new_str = str.replace(new RegExp(wordArr.join('|'),'g'), match => c_obj[match]);