var tmp = "An ${a} a ${b} keeps the ${c} away";
// obj 是 json 对象
var obj = {
a:"apple",
b:"day",
c:"doctor"
};
/**
*@descript 声明定义一个函数 tmpl,该函数将文本模板对应的变量替换后返回
*
*/
function tmpl(t,o){
/*
*replace 函数匹配到 1 个字符串后传给函数,函数返回一个替换的字符串,
*然后把匹配到的内容替换掉。接着重复上述步骤直到正则引擎指针到源字符串
*结尾才停止匹配,然后把替换后的字符串返回
*/
return t.replace(/\${(.)}/g,function(m,p){ // m 是正则式匹配到的文本,例如,${a};p 引用捕获性分组 (.) 匹配到的内容,例如,"a"
console.log('m:'+m+' p:'+p);
return o[p]; // o 是一个 json 对象,获取 o 对象的属性值并返回,例如,p = "a",则获取 o 对象的属性 a 的值
});
}
// 打印输出函数 tmpl 返回的内容
console.log(tmpl(tmp,obj));
上述功能使用ES6可这么实现:
var obj = {
a:"apple",
b:"day",
c:"doctor"
};
with(obj){
console.log(`An ${a} a ${b} keeps the ${c} away`);
}