Javascript 正则表达式模式-简单字符串模板,对象映射

Javascript 正则表达式模式-简单字符串模板,对象映射,javascript,regex,Javascript,Regex,我对一个简单的正则表达式有困难 假设我有以下模板: PWR{state} VOL{region}{level} CHANEL\uuuuuuuuuuuuuuuuuuu 我的数据如下所示: PWR\u打开/PWR\u关闭 VOL\u MASTER\u 21 VOL\u SECOND\u 76 CHANEL\uuuuuuuuuuuuuuuuuuu 我只需要一个将模板映射到以下值的对象: PWR\u ON: { “状态”:“开”、“关” } 第二卷76: { “区域”:“第二”, “级别”:“

我对一个简单的正则表达式有困难

假设我有以下模板:

  • PWR{state}
  • VOL{region}{level}
  • CHANEL\uuuuuuuuuuuuuuuuuuu
我的数据如下所示:

  • PWR\u打开
    /
    PWR\u关闭
  • VOL\u MASTER\u 21
  • VOL\u SECOND\u 76
  • CHANEL\uuuuuuuuuuuuuuuuuuu
我只需要一个将模板映射到以下值的对象:
PWR\u ON

{
“状态”:“开”、“关”
}
第二卷76

{
“区域”:“第二”,
“级别”:“76”
}
如何存档此elegent? 我到现在为止所做的:

const CMD=“VOL_SECOND_21”;
const TEMPLATE=“VOL{region}{level}”;
//从模板中获取参数键名称
//常量名称=/{(+?)}/g.exec(cmd_obj.template);
constnames=newregexp(“{(+?)}”,“gm”).exec(TEMPLATE.slice(1);
//获取参数键的值
const regex=TEMPLATE.replace(/{.+?}/g,“(.*)”;
const values=newregexp(regex,“g”).exec(CMD).slice(1);
//键/值不匹配
//[“区域”][“第二”、“21”]
log(名称、值)
该方法通过查找匹配项并使用当前找到的索引更新RegExp对象来工作。然后,您需要使用相同的RegExp对象再次调用exec,您将获得下一个匹配项,依此类推

由于只使用一个表达式调用
模板
exec一次,因此得到了第一个匹配项

CMD exec可以工作,因为表达式可以匹配您要查找的所有内容

您可以使用exec而不是exec,并创建一个将捕获所有相关组的表达式

要创建对象,请将名称和值配对,并使用以获取新对象

const CMD=“VOL_SECOND_21”;
const TEMPLATE=“VOL{region}{level}”;
const names=TEMPLATE.match(/[^\{\}]+(?=\})/g);
const regex=TEMPLATE.replace(/{.+?}/g,“(.*)”;
const values=CMD.match(newregexp(regex)).slice(1);
const result=Object.fromEntries(names.map((s,i)=>[s,values[i]]))

console.log(结果)
这很好。小挑剔:你在文本中提到了
Object.fromPairs()
,但在代码中使用了
Object.fromEntries()
(链接也在这里)很好地抓住了@nick。固定的。
.fromPairs()
是一个lodash方法,它也做同样的事情。