如何将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)