實(shí)現(xiàn)一個(gè)字符串模板函數(shù)
const a = {
b: 'xxx',
c: ['a', 'b'],
d: {
a: 'a'
}
}
const string = 'aaa${a.b}bbb${a.c[0]}ccc${a.d.a}'
transform(string, a) => 'aaaxxxbbbaccca'
解題思路
通過正則表達(dá)式將插值部分匹配出來替換成對(duì)象屬性值
const a = {
b: 'xxx',
c: ['a', 'b'],
d: {
a: 'a'
}
}
const transform = (str) => {
let newStr = str.replace(/\$\{.*?\}/g, (res) => {//正則表達(dá)式匹配${xxxx}
let newValue = ""
try {
newValue = eval(res.slice(2, -1));//截取插值部分
}
catch (exception) {//如果取值報(bào)錯(cuò)將匹配的字符串部分原樣返回
newValue = res;
}
return newValue;
})
return newStr;
}
const str = 'aaa${a.b}bbb${a.c[0]}ccc${a.d.a}';
console.log(transform(str));//aaaxxxbbbaccca