在字符串中查找相邻的组

时间:2017-03-31 06:59:12

标签: javascript regex

我需要找到字符串中有多少大组。 一个小组只是一个连续的段(相同的字符重复)。 一大群是由两个或更多小团体组成的连续部分。

代码更清晰,下面我得到所有小组

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个小组不是连续的,因此没有大的组。

1 个答案:

答案 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,} - 两次或更多次非捕获组模式。