2016-11-22 80 views
2

我想找到任何字符串重复。我有以下代码:正则表达式 - 最小长度的字符串重复

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

它发现在“weabcabcjy” ABC'复制,但它也发现“LL”中的“所有”。我想有正则表达式来限制复制的最小长度为2个字符。这意味着它总是比较两个字符和其他两个字符。

回答

2

.+?图案发现比换行符字符以外的任何一个或多个字符,所以在llall将得到匹配由于第一l将被捕获到组1,第二个将与\1+匹配。

要只找2+字符块的重复,你可以使用一个懒惰限制量词{2,}?

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

the regex demo

(.{2,}?)\1+模式将匹配捕获到组1中的任意两个或更多,但尽可能少的字符,而不是换行符号,然后是一个或多个相同的连续子字符串。

+0

我正在尝试(。?){2,} \ 1+,但这种方式并没有发生在我身上。谢谢。 – MakoBuk

+0

噢,['(。?){2,} \ 1 +'](https://regex101.com/r/dIjvQ3/1)看起来很诡异。量化可选模式会导致匹配空字符串。避免捕获JS中的重复组,除非您尝试删除单次出现的连续重复。 –

相关问题