思路
1.提取出${}里面的变量
2.匹配返回正确的值
3.递归循环直到不再匹配为止
let obj = { num1: "abc", num2: "def", num3: 'lmn' }
function tmp(str, obj) {
let reg = /\${(\w*)}/;
let res = reg.exec(str)
if (res) {
//eg: res[0] 匹配到 ${num1},res[1] 匹配到 num1
str = str.replace(res[0], obj[res[1]])
return tmp(str, obj)
//注意要return 递归的函数,否则打印的是undefined,
//原因是在递归函数内部没有对递归函数进行return,否则外层函数无法接收到返回值。
} else {
return str
}
}
let m = tmp("123${num1}456${num2}%", obj)
let n = tmp("123${num3}${num2}45${num1}", obj)
console.log(m)//123abc456def%
console.log(n)//123lmndef45abc
特别注意:递归时要对递归函数内部进行return!!!