Благодаря направлению Фарвилайн я нашел решение для этого.
регулярное выражение изменено на:
/([a-z\_]+)\((.*)\)/
и вместо "соответствия" я использовал "заменить"
и вот оно:
var explore_parent_child = (val, reg) => {
var v = val.replace(reg, (a, b, c) => {
var res = {};
var exp = explore_parent_child(c, reg);
if(typeof(exp) == 'object') {
exp.m = a;
res[b] = exp;
} else{
res[b] = {
m: a,
child: exp
};
}
return JSON.stringify(res);
})
try { return JSON.parse(v) } catch { return v };}
пример выполнения:
explore_parent_child("parent( child( child_of_child(value) ) )", /([a-z\_]+)\((.*)\)/)
результат:
parent: {
m: 'parent( child( child_of_child(value) ) )',
child: {
m: 'child( child_of_child(value) )',
child_of_child: {
m: 'child_of_child(value)',
value: 'value'
}
} }