我在使用正则表达式延迟匹配时遇到问题。没有例子很难解释:
我的正则表达式:A\d*?(88)?\d*?B
示例 1:A12388456B
我想要的:匹配字符串,第 1 组匹配“88”
会发生什么:匹配字符串,但组 1 不匹配。
示例 2:A123B
我想要的:匹配字符串,组 1 不匹配。
会发生什么:工作正常
基本上我希望第 1 组匹配出现的“88”,但我也想匹配任何模式A\d+B
。
这似乎应该很简单,但我遇到了麻烦。
我在使用正则表达式延迟匹配时遇到问题。没有例子很难解释:
我的正则表达式:A\d*?(88)?\d*?B
示例 1:A12388456B
我想要的:匹配字符串,第 1 组匹配“88”
会发生什么:匹配字符串,但组 1 不匹配。
示例 2:A123B
我想要的:匹配字符串,组 1 不匹配。
会发生什么:工作正常
基本上我希望第 1 组匹配出现的“88”,但我也想匹配任何模式A\d+B
。
这似乎应该很简单,但我遇到了麻烦。
在 Javascript 中尝试这个正则表达式:
'A12388456B'.match(/A(?:\d*?(88))?\d*?B/);
> ["A12388456B", "88"] // Matches string and 88.
'A123B'.match(/A(?:\d*?(88))?\d*?B/);
> ["A123B", undefined] // Matches string but nothing else.
在第一个示例中,组 1 捕获 88。
您要匹配的第一个组未标记为组。
你会想要:
(A\d*)?(88)?\d*?B
然后你有两个子组和主匹配。
使用正则表达式,如果找到匹配A(?=\d*(88))\d*B
,组 1 将包含。88