如果我运行这个:
'121'.match(/[0-9]{2}/gi)
Run Code Online (Sandbox Code Playgroud)
我得到一个结果的数组:
['12']
Run Code Online (Sandbox Code Playgroud)
即使它们重叠,我怎样才能让它返回所有结果?我希望结果如下:
['12', '21']
Run Code Online (Sandbox Code Playgroud)
编辑:或者更好的例子是:
'1234567'.match(...);
Run Code Online (Sandbox Code Playgroud)
应该给我一个数组
[12,23,34,45,56,67]
小智 7
这适用于大多数pcre引擎.
捕获2,消耗1.
/(?=(\d\d))\d/g
我是javascript的新手.这有效:
var pat = /(?=(\d\d))\d/g;
var results = [];
var match;
while ((match = pat.exec('1234567')) != null) {
results.push(match[1]);
}
console.log(results);
Run Code Online (Sandbox Code Playgroud)
产量:12,23,34,45,56,67
这不会按照你想要的方式工作。
当您指定模式时[0-9]{2}
,match()
查找第一次出现的两位数字,然后从该位置继续搜索。由于字符串长度为3,显然它不会找到另一个匹配项。
您应该使用不同的算法来查找所有两位数。我建议使用您的第一场比赛的组合,并使用以下正则表达式再做一次
/[0-9]([0-9]{2})/
并结合第一轮和第二轮的组。