javascript - 查找字符串中的相邻组

标签 javascript regex

我需要找出字符串 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/

相关文章:

Javascript - 函数工作一次,但再也不会

C++ 正则表达式匹配 - 拉出匹配的数字

php - 如何在 php 中验证正确的域名和子域

regex - Perl 单行匹配所有出现的正则表达式

html - 如何在 Visual Studio Regex 中捕获任何字符(包括\n)

html 中的 Javascript 不起作用,甚至没有警报

javascript - jQuery Blur() 或 focusout() 在 Internet Explorer 中未触发

javascript - 如何将项目推送到 json 文件?

javascript - 如何在 $.getJSON 中写入可选参数

java - 正则表达式仅在搜索单词后为空格字符时才给我输出