我最近开始在nodeJs上编程。
我有不同的字符串和Json对象;
例如:
var str = 'My name is {name} and my age is {age}.';
var obj = {name : 'xyz' , age: 24};
var str = 'I live in {city} and my phone number is {number}.';
var obj = {city: 'abc' , number : '45672778282'};
如何自动执行此过程,因此使用string和obj我会将字符串{}值替换为obj(键值)。
我尝试了PUG但无法解析。
pug.render(str, obj);
对我不起作用。
答案 0 :(得分:2)
让我们看看,你想制作像模板一样的东西,就像把手http://handlebarsjs.com/一样。
我会举个例子,为你制作一个简单的把手:
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;
}
答案 1 :(得分:1)
以下是主题的变体。
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)
答案 2 :(得分:0)
我认为你不应该重新发明轮子,因为最简单的解决方案是使用一些流行的节点模块。
我建议'sprintf-js'。
请在此处查看我的示例代码,
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)
答案 3 :(得分:0)
这可以通过单个替换调用实现。
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]);