Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/474.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JS中的命名组和或运算符_Javascript_Node.js_Regex_Pcre - Fatal编程技术网

Javascript JS中的命名组和或运算符

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

我正在尝试匹配字符串,如2h30m、24h、1d20h30s,并使用命名组提取每个片段。听起来简单可行,如果您将PCRE与以下正则表达式一起使用:

^(((?<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”,但是谢谢!