正则表达式 - 最小长度的字符串重复

Regex - string repetition of min length

我想找到任何重复的字符串。我有以下代码:

let match: Object;
let repetition: ?string;
while ((match = /(.+?)+/g.exec(string)) !== null && repetition === null) {
  repetition = match[1];
}

它在 'weabcabcjy' 中找到 'abc' 个复制,但也在 'all' 中找到 'll'。我想让正则表达式将复制的最小长度限制为 2 个字符。这意味着它总是至少将 2 个字符与其他两个字符进行比较。

.+? 模式会找到任何 一个 或更多字符而不是换行符,因此 all 中的 ll 将被匹配,因为第一个 l 将被捕获到第 1 组,第二个将与 +.

匹配

要仅查找 2 个以上字符块的重复,您可以使用惰性 限制 量词 {2,}?:

/(.{2,}?)+/g

the regex demo

(.{2,}?)+ 模式将匹配并捕获任何两个或更多但尽可能少的除换行符号以外的字符,然后是 1 个或多个相同的连续子字符串。