我的例子中n = 4。
我对Regex很新,现在已经搜索了20分钟。有一些有用的网站简化了一些事情,但我无法解决如何继续这样做。
我希望从中提取4个连续数字的每个组合:
12345
得到:
1234 - possible with ^\d{4}/g - Starts at the beginning
2345 - possible with \d{4}$/g - Starts at the end
但我无法兼得!输入可以是任何长度。
答案 0 :(得分:2)
您的表达式未按预期工作,因为这两个子字符串重叠。
除了零长度断言之外,输入字符串中的任何字符都将在匹配过程中使用,这会导致找不到重叠匹配。
您可以通过使用前瞻和捕获组来检索重叠匹配来解决此问题。这是有效的,因为前瞻断言(以及后向断言)被归类为零长度断言,这意味着它们不消耗匹配;从而允许您找到任何重叠的匹配。
(?=(\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]);
}
答案 1 :(得分:1)
答案 2 :(得分:0)
使用具有所有可能性的前瞻断言
(?=(0123|1234|2345|3456|4567|5678|6789))
(?=
( # (1 start)
0123
| 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