笔试实现一个字符串模板函数

实现一个字符串模板函数

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
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。