For example string 1212121212121212121212
It needs to match 5 consecutive 12s or 5 consecutive 21s to be considered qualified
The number of matches should be 13, as shown in the figure below, the red lines represent matches.
Consider extraction without occupancy and use look-around to extract subgroups: (?=.*?((12|21)2{4}))
Demo link: http://regex.zjmainstay.cn/r/...
>>> import re
>>> ss='1212121212121212121212'
>>> re.findall(r'(?=((12|21){4}))',ss)
[('1212121212', '12'), ('2121212121', '21'), ('1212121212', '12'), ('2121212121', '21'), ('1212121212', '12'), ('2121212121', '21'), ('1212121212', '12'), ('2121212121', '21'), ('1212121212', '12'), ('2121212121', '21'), ('1212121212', '12'), ('2121212121', '21'), ('1212121212', '12')]
js's Re engine is a bit rough and needs to loop back to submatches.
var str="1212121212121212121212";
var pattern=/(?=((12|21){4}))/g;
while(m = pattern.exec(str)){
console.log(m[1])
pattern.lastIndex++ //由于沒(méi)有消耗字符,js的Re引擎不會(huì)遞增索引。
}
var pattern=/(?:(1)(?=(?:21){4}2))|(?:(2)(?=(?:12){4}1))/g;
var str="1212121212121212121212";
console.log(str.match(pattern));