如何将string{}值replace为obj(键值)

我最近开始在nodeJs上编程。

我有不同的string和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我会将string{}值replace为obj(键值)。

我尝试过PUG,但无法parsing。

 pug.render(str, obj); 

不适合我

让我们看看,你想要像模板一样,像手柄http://handlebarsjs.com/

我会给你这个例子来为你做一个简单的句柄的情况:

 function render(template, properties) { var result = template; for (i in properties) { result = result.replace("{"+i+"}",properties[i]); } return result; } 

但是这个只会改变各个属性的第一个发生,如果你想在整个模板中可以用这个replace掉所有的:

 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) 

我认为你不应该重新发明轮子,因为最简单的解决scheme是使用一些stream行的节点模块。

我build议'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)