题目:
let str = '你好,我叫{{name}},今年{{age}}岁了}',
实现函数: compile(str,{name:"小明",age:18})
输出:你好,我叫小明,今年18岁了
实现思路:使用正则匹配目标字符{{...}},提取key,根据key获取value值。
正则:/\{\{(.*?)}}/g
function compile(str,obj){
return str.replace(/\{\{(.*?)}}/g,function(matchText,key){
return obj[key.trim()]
})
}
正则分析:
1.匹配双大括号 {{}}的正则 /\{\{}}/;
2.匹配任意字符 /.*/
3.结合1、2可以匹配到{{name}}形式 /\{\{.*}}/
4.为了提取出双大括号之间的字段,进行分组操作 /\{\{(.*)}}/
5.第4步会出现提取出 name}},今年{{age 的情况,这主要是因为正则是尽可能多的匹配符合的字符,所以要惰性匹配,此时正则修改为 /\{\{(.*?)}}/g