实现一下「模版字符串」功能;

1,183 阅读1分钟

思路

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!!!