输入两个参数:
- str:
'哈哈,我是{{name}},今年{{age}}岁啦。' - data:
{ name: 'mazey', age: 18 }
执行 template(str, data)
输出: '哈哈,我是mazey,今年18岁啦。'
const str = '哈哈,我是{{name}},今年{{age}}岁啦。'
const data = {
name: 'mazey',
age: 18
}
function template (str, data) {
str = str.replace(/\{\{(.+?)\}\}/g, (...rest) => {
console.log(rest) // ["{{name}}", "name", 5, "哈哈,我是{{name}},今年{{age}}岁啦。"]
return data[rest[1]]
})
return str
}
console.log(template(str, data)) // 哈哈,我是mazey,今年18岁啦。
技巧: replace 第二个参数除了可以是替换的字符串,还可以指定一个函数作为参数,该函数的返回值将替换第一个参数匹配到的结果。
function reFunc (...rest) {
console.log(匹配的子串: ${rest[0]})
console.log(匹配的 $1: ${rest[1]})
console.log(匹配的偏移量: ${rest[2]})
console.log(被匹配的原字符串: ${rest[3]})
return [[抓到 ${rest[1]}]]
}
let str = '小薰今年升{{高中}},有三个{{好朋友}}'
str = str.replace(/\{\{(.+?)\}\}/g, reFunc)
console.log(str) // 小薰今年升[[抓到 高中]],有三个[[抓到 好朋友]]
// 匹配的子串: {{高中}}
// 匹配的 $1: 高中
// 匹配的偏移量: 5
// 被匹配的原字符串: 小薰今年升{{高中}},有三个{{好朋友}}