我需要找到字符串中有多少大组。 一个小组只是一个连续的段(相同的字符重复)。 一大群是由两个或更多小团体组成的连续部分。
代码更清晰,下面我得到所有小组
var s = "ccccoodeffffiiighhhhhhhhhhttttttts";
sgroups= s.match(/(.)\1+/g);
console.log(sgroups)
如何找到大型团体?
"ccccoo",
"ffffiii",
"hhhhhhhhhhttttttt"
在另一个例子中
var s = "soooooldieeeeeer";
var sgroups= s.match(/(.)\1+/g);
console.log(sgroups)
在上面的代码中,由于原始字符串中的2个小组不是连续的,因此没有大的组。
答案 0 :(得分:4)
您可以使用:
var rx = /(?:(.)\1+(?!\1)){2,}/g;
console.log("soooooldieeeeeer".match(rx));
console.log("soooooldieeeeeerrr".match(rx));
<强>详情:
(?:
- 启动非捕获组(不会为我们创建编号捕获,以便以后仍能使用\1
反向引用并保持匹配“干净”)
(.)
- 捕获第1组匹配任何字符(但换行符号)\1+
- 与第1组中存储的相同字符的一次或多次出现(其中\1
是对第1组中保留的值的反向引用,而+
是一次或多次出现量词)(?!\1)
- 确保相同字符的块没有使用相同的字符,以便不允许回溯匹配字符串,其中出现4个或更多连续相同的字符。){2,}
- 两次或更多次非捕获组模式。