我想找到任何字符串重复。我有以下代码:
let match: Object;
let repetition: ?string;
while ((match = /(.+?)\1+/g.exec(string)) !== null && repetition === null) {
repetition = match[1];
}
它在'weabcabcjy'中找到'abc'复制,但它也在'all'中找到'll'。我想有正则表达式将最小复制长度限制为2个字符。这意味着它总是最少2个字符与其他2个字符进行比较。
答案 0 :(得分:2)
.+?
模式会找到除换行符之外的任何一个或更多字符,因此ll
中的all
将从第一个l
开始匹配}将被捕获到第1组,第二个将与\1+
匹配。
要查找重复的2个以上字符块,您可以使用惰性限制量词{2,}?
:
/(.{2,}?)\1+/g
请参阅the regex demo。
(.{2,}?)\1+
模式将匹配并捕获到组1中的任意两个或更多,但尽可能少,除了换行符号之外的字符,然后是一个或多个相同的连续子串。