实现一个字符串模板函数
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'
解题思路
通过正则表达式将插值部分匹配出来替换成对象属性值
const a = {
b: 'xxx',
c: ['a', 'b'],
d: {
a: 'a'
}
}
const transform = (str) => {
let newStr = str.replace(/\$\{.*?\}/g, (res) => {//正则表达式匹配${xxxx}
let newValue = ""
try {
newValue = eval(res.slice(2, -1));//截取插值部分
}
catch (exception) {//如果取值报错将匹配的字符串部分原样返回
newValue = res;
}
return newValue;
})
return newStr;
}
const str = 'aaa${a.b}bbb${a.c[0]}ccc${a.d.a}';
console.log(transform(str));//aaaxxxbbbaccca
网友评论