Javascript 将所有出现的{{var}}替换为value

Javascript 将所有出现的{{var}}替换为value,javascript,regex,Javascript,Regex,我有一个包含标识符的字符串 "Hello {{name}}, you are {{age}} years old." 示例对象: let valueMap = {name: 'jeff', age: 26} 将其转换为以下内容的最佳方式是什么: "Hello jeff, you are 26 years old." 我目前的代码是: let string = 'Hello {{name}}, {{name}} you are {{age}} years old. {{wtf}}'; le

我有一个包含标识符的字符串

"Hello {{name}}, you are {{age}} years old."
示例对象:

let valueMap = {name: 'jeff', age: 26}
将其转换为以下内容的最佳方式是什么:

"Hello jeff, you are 26 years old."
我目前的代码是:

let string = 'Hello {{name}}, {{name}} you are {{age}} years old. {{wtf}}';

let objMap = {
  name: 'deojeff',
  age: 26,
}

let parsedString

let matched = string.match(/[^\{{.+}]+(?=}})/g)

let replaced = string.replace(/[^\{{.+}]+(?=}})/g, (args) => {
  return objMap[args] !== undefined ? objMap[args] : args
})

console.log(replaced) 
// Hello {{deojeff}}, {{deojeff}} you are {{26}} years old. {{wtf}}
但是它包括
{{
}
,做这件事的最好方法是什么
var string='Hello{{{name},{{{name}你已经{{age}岁了。{{wtf}}};
var objMap={
姓名:“杰夫”,
年龄:26,,
};
for(objMap中的var prop){
if(对象映射hasOwnProperty(属性)){
string=string.replace(新的RegExp('{{'+prop+'}}}',g),objMap[prop]);
}
}

console.log(字符串)有许多模板解析器库可用。你可以用其中一个。
dot是其中一个可供参考的功能。

只需将“替换”功能更改为:

let replaced = string.replace(/{{(.*?)}}/g, (args, arg0) => {
  return objMap[arg0] !== undefined ? objMap[arg0] : args
})
var string='Hello{{{name},{{{name}你已经{{age}岁了。{{wtf}}};
var objMap={
姓名:“杰夫”,
年龄:26,,
}
var matched=string.match(/[^\{.+}]+(?=}})/g)
var replaced=string.replace(/(\{.*?\})/g,函数(m,$1){
//从开始到结束对{{}进行切分,这样我们就可以使用dget键
var key=$1.slice(2,-2);;
返回objMap[key]| |“”;
});
console.log(已替换)

//你好{{{deojeff}},{{{deojeff}}你已经{{26}岁了。{{wtf}
如果您使用的是es6,则始终可以使用反勾号(模板文本)


您可以阅读更多内容。

这将是一项有效的工作。另外,将
{{wtf}}
替换为

const string='Hello{{{name},{{{name}你已经{{age}岁了。{{wtf}}};
常量objMap={
姓名:“杰夫”,
年龄:26,,
}
//const matched=string.match(/(?:\{{2})([^\}])+(?:\}{2})/g);
const replaced=string.replace(/(?:\{{2})([^\}])+(?:\}{2})/g,(args)=>{
const parsedArgs=args.replace(/\{\}/g',);
返回objMap[parsedArgs]!==未定义?objMap[parsedArgs]:“”;

});代码应该如何处理
{{wtf}
?移除它?留着?应该留着。因为它在
objMap
中没有任何匹配项,所以可能重复,哇!这很好用,也很干净。我不知道你能做到。谢谢,我正在使用ES6。但是字符串将是来自用户的输入,所以我们正试图使其尽可能简单。哦,好的。您的权利,这只有在用户没有编写字符串的情况下才有意义。对不起,您应该保持
{{{wtf}}
原样。使用
返回objMap[key]| | m在替换中。
let obj = {
  name: 'deojeff',
  age: 26,
}

let string = `Hello ${name}, ${name} you are ${age} years old.`

console.log(string)