我需要找出字符串 s 中有多少个大组。 一个小组只是一个连续的片段(重复相同的字符)。 大组是由 2 个或更多小组组成的连续片段。
代码更清晰,下面我把所有的小组都搞定了
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 个小组不连续,因此没有大组。
最佳答案
您可以使用:
var rx = /(?:(.)\1+(?!\1)){2,}/g;
console.log("soooooldieeeeeer".match(rx));
console.log("soooooldieeeeeerrr".match(rx));
详细信息:
(?:
- 非捕获组的开始(不会为我们创建编号捕获,以便我们以后仍能使用\1
反向引用并保留匹配“干净”)(.)
- 捕获第 1 组匹配任何字符(但换行字符)\1+
- 与第 1 组中存储的相同字符出现一次或多次(其中\1
是对第 1 组中保存的值的反向引用,+
是一个一次或多次出现量词)(?!\1)
- 确保相同字符 block 后面没有相同的字符,以免出现 4 个或更多连续相同字符的回溯匹配字符串。
){2,}
- 非捕获组模式出现两次或多次。
关于javascript - 查找字符串中的相邻组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43134394/