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方法,它也做同样的事情。