function compile(str, obj){
const reg = /\$\{(.+?)\}/
if(reg.test(str)){
str = str.replace(reg,(...arg)=>{
return getValue(obj,arg[1] )
})
return compile(str, obj)
}else{
return str
}
}
function getValue(obj, key){
let t = key.split(".")
let res = obj
const arrReg = /(\w+)\[(.+)\]/
for(let a of t){
if(arrReg.test(a)){
res = res[a.match(arrReg)[1]][a.match(arrReg)[2]]
}else{
res = res[a]
}
}
return res
}
const obj = {
b:"world",
ddd:[
{
e:"I"
}
],
ff:{
g:"like"
}
}
const str = "Hello ${b},${ddd[0].e} ${ff.g} $!"
console.log(compile(str, obj))
console.log(obj['ddd'])
console.log(/(\w+)\[(.+)\]/.test("ddd[0]"))