regex 正则表达式:匹配重复模式的所有占用,包括一个接一个的重叠[重复]

qcbq4gxm  于 2023-10-22  发布在  其他
关注(0)|答案(3)|浏览(139)

此问题已在此处有答案

How can I match overlapping strings with regex?(6个回答)
How to use regex to find all overlapping matches(5个答案)
Overlapping matches in Regex(3个答案)
上个月关门了。
我如何在这里提取两个重叠的匹配?

console.log(', , ,'.match(/,\s+,/g));

第一场:

', , ,'
       ^ ^
from --+ |
to ------+

第二场比赛:

', , ,'
         ^ ^
from ----+ |
to --------+
  • 对于输入", ,",它应该匹配一次
  • 对于输入", , ,",它应该匹配两次
  • 对于输入", , , ,",它应该匹配三次
xlpyo6sf

xlpyo6sf1#

您不想直接匹配逗号,而是想使用“积极前瞻”来检查,是否超过匹配的右边缘。
这样,下一个组也可以匹配,

console.log(', , ,'.match(/,\s+(?=,)/g));
6xfqseft

6xfqseft2#

获取重叠匹配的一种方法是使用带有捕获组的lookahead:

subject = '1-2-3-4'
re = /(?=(\d-\d))/g

console.log([...subject.matchAll(re)].map(m => m[1]))
zed5wv10

zed5wv103#

console.log(', , ,'.match(/,\s{1,},/g));

相关问题