其中n = 4在我的例子中。匹配所有连续数字的长度n
我对Regex很新,现在已经搜索了20分钟。有一些有用的网站可以简化事情,但我无法解决如何进行此操作。
我要连续4个数字的每个组合由该提取:
12345
获得:
1234 - possible with ^\d{4}/g - Starts at the beginning
2345 - possible with \d{4}$/g - Starts at the end
但我不能两全!输入可以是任意长度。
其中n = 4在我的例子中。匹配所有连续数字的长度n
我对Regex很新,现在已经搜索了20分钟。有一些有用的网站可以简化事情,但我无法解决如何进行此操作。
我要连续4个数字的每个组合由该提取:
12345
获得:
1234 - possible with ^\d{4}/g - Starts at the beginning
2345 - possible with \d{4}$/g - Starts at the end
但我不能两全!输入可以是任意长度。
如预期,因为这两个子串是重叠的表达式是行不通的。
除了零长度断言之外,输入字符串中的任何字符都将在匹配过程中消耗,导致重叠匹配找不到。
您可以通过使用前瞻和捕获组来检索重叠匹配来解决此问题。这是有效的,因为前瞻断言(以及后向断言)被分类为零长度断言,这意味着它们不消耗匹配;从而让你找到任何重叠的比赛。
(?=(\d{4}))
这里是一个快速片段演示此:
var regex = /(?=(\d{4}))/g;
var input = '12345678';
var match;
while ((match = regex.exec(input)) !== null) {
if (match.index === regex.lastIndex) {
regex.lastIndex++;
}
console.log(match[1]);
}
使用前瞻断言所有的可能性
(?=(0123|1234|2345|3456|4567|5678|6789))
(?=
( # (1 start)
| 1234
| 2345
| 3456
| 4567
| 5678
| 6789
) # (1 end)
)
输出
** Grp 0 - (pos 0 , len 0) EMPTY
** Grp 1 - (pos 0 , len 4)
1234
------------------
** Grp 0 - (pos 1 , len 0) EMPTY
** Grp 1 - (pos 1 , len 4)
2345
谢谢你的详细解释。我只是问[这个问题](http://stackoverflow.com/questions/42456201/what-should-the-javascript-match-regex-function-return),因为我很难返回比赛。你对零长度的评价已经超出了我的头脑,但也许可以解释为什么我会得到奇怪的结果。编辑:我应该澄清,我没有使用你的代码,因为它导致无限循环出于某种原因。 – DaveHolt