JSFiddle - React, Tailwind, and code Playground
JavaScript
log=s=>{document.body.innerHTML+=`${s}<br>`}
function Prop(obj,is,value) {
if (typeof is == 'string')
is=is.split('.');
if (is.length==1 && value!==undefined)
return obj[is[0]] = value;
else if (is.length==0){
return obj;
}else{
var prop=is.shift();
//Forge a path of nested objects if there is a value to set
if(value!==undefined&&obj[prop]==undefined)obj[prop]={}
return Prop(obj[prop],is, value);
}
}
function render(str,obj){
originalRegex = /\$\{(.+?)\}/g
RelicRegex = /(?!\${)([^{}]*)(?=})/g
return str.replace(originalRegex,(match,p1)=>Prop(obj,p1))
}
log(render('abc${a}asdas',{a:23,b:44})) //abc23asdas
log(render('abc${a.c}asdas',{a:{c:22,d:55},b:44})) //abc22asdas