Javascript 正则表达式:用嵌套元素替换字符串中的

Javascript 正则表达式:用嵌套元素替换字符串中的,javascript,Javascript,我有这个字符串: const string = "{* * @test * { * username: {{username}} * email: {{email}} * password: {{password}} * name: { * first: {{firstname}} * last: {{lastname}} * }, * phone: {{phone}} * } }" 我希望最后能有这样的东西: { "username": "{{username}}", "em

我有这个字符串:

const string = "{* * @test * { * username: {{username}} * email: {{email}} * password: {{password}} * name: { * first: {{firstname}} * last: {{lastname}} * }, * phone: {{phone}} * } }"
我希望最后能有这样的东西:

{
    "username": "{{username}}",
    "email": "{{email}}",
    "password": "{{password}}",
    "name": {
        "first": "{{firstname}}",
        "last": "{{lastname}}"
    },
    "phone": "{{phone}}"
}
这是我的密码:

const str=“{**@test*{*用户名:{{{username}}}*电子邮件:{{{email}}*密码:{{{password}}}*姓名:{*first:{{{firstname}}*姓氏:{{{lastname}}}},*电话:{{phone}}}}}}”
常量regex=/.\{\*([^:]+):([^]+)\*}/gm;
const subst=`{\n\t“$1”:“$2”\n}`;
//被替换的值将包含在结果变量中
const result=str.replace(regex,subst);

控制台日志(结果)一种方法是替换所有无效的JSON标记以生成有效的JSON字符串,并使用
JSON.parse
将JSON字符串解析为对象

如图所示,这相当笨拙,如果实际数据中有额外的边缘情况,可能需要调整和优化,但应该很好地处理递归结构问题。将其视为概念的证明

const string=“{**@test*{*用户名:{{{username}}}*电子邮件:{{{email}}*密码:{{{password}}}*姓名:{*first:{{{firstname}}*姓氏:{{{lastname}}}},*电话:{{phone}}}}}}”;
常量=字符串
.replace(/({.+?})/g,`“$1`)//引用模板变量
.replace(/\*([a-z]+?):/ig,“$1”:`)//引用键
.replace(/“”/g,`,“`)//在键之间添加逗号
.替换(/\*/g,”)//删除星号
.replace(/@[a-z]+//ig,”)//摆脱“@测试`
.trim()//修剪以便我们可以删除“{}”
;
const parsed=JSON.parse(cleaned.substr(1,cleaned.length-2));
预期常数={
“用户名”:“{username}}”,
“电子邮件”:“{email}}”,
“密码”:“{password}}”,
“姓名”:{
“first”:“{{firstname}}”,
“last”:“{lastname}”
},
“电话”:“{phone}”
};
console.log(
`与预期匹配?${JSON.stringify(预期)==JSON.stringify(已解析)}\n`,
解析
);