Javascript JS中的命名组和或运算符
我正在尝试匹配字符串,如2h30m、24h、1d20h30s,并使用命名组提取每个片段。听起来简单可行,如果您将PCRE与以下正则表达式一起使用:Javascript JS中的命名组和或运算符,javascript,node.js,regex,pcre,Javascript,Node.js,Regex,Pcre,我正在尝试匹配字符串,如2h30m、24h、1d20h30s,并使用命名组提取每个片段。听起来简单可行,如果您将PCRE与以下正则表达式一起使用: ^(((?<h>[0-9]+)h)|((?<m>[0-9]+)m))+$ ^((([0-9]+)h)|(([0-9]+)m))+$ 在完整的示例中,您可以在右上角的PCRE和Javascript引擎之间切换 问题是它在javascript中不起作用,我不明白为什么。我猜这与OR操作符和命名组之间的交互有关,因为在使用jav
^(((?<h>[0-9]+)h)|((?<m>[0-9]+)m))+$
^((([0-9]+)h)|(([0-9]+)m))+$
在完整的示例中,您可以在右上角的PCRE和Javascript引擎之间切换
问题是它在javascript中不起作用,我不明白为什么。我猜这与OR操作符和命名组之间的交互有关,因为在使用javascript时,它只返回一个命名组
问题是为什么?如果有任何方法可以在javascript中实现这一点,那么似乎应该将
替换为?
来捕获一行中的多个组(使用
,一行中只能捕获最后一个组)。我们需要添加一个非空断言来防止空字符串匹配。此外,值得插入一些?:
,以使某些组不被捕获
“严格使用”;
常量str=`
2h30m
24小时
1d20h30s
`;
常数re=/^(?=.+)(?:(?:([0-9]+)d)?(?:([0-9]+)h)?(?:([0-9]+)m)?(?:([0-9]+)s)?(?:([0-9]+)ms)?+/gm;
让结果;
while(result=re.exec(str))console.log(result.groups)代码>不错!我正在使用类似的东西,但唯一的问题是这个解决方案不能处理无序字符串,比如“30m2h”,但是谢谢!