2016-11-22 13 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つに対して常に最小2文字を比較することを意味します。

答えて

2

.+?パターンは、改行文字以外の任意の以上の文字を見つけ、第1 lグループ1に捕捉され、第二つ\1+と一致するので、allllが一致してしまいます。

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

the regex demoを参照してください:

はあなたが怠惰な制限数量詞{2,}?を使用することができ2+文字チャンクの繰り返しを検索します。

(.{2,}?)\1+パターンは、改行記号と1つ以上の同じ連続した部分文字列以外の2つ以上の文字をグループ1に一致させてキャプチャします。

+0

私は({?){2、} \ 1+を試していましたが、この方法は私には起こりませんでした。ありがとうございました。 – MakoBuk

+0

ああ、['(。?){2、} \ 1 +'](https://regex101.com/r/dIjvQ3/1)はすごくうんざりです。オプションのパターンを数量化すると、空の文字列に一致します。 1回の繰り返しで連続したリピートを削除しない限り、JSで繰り返しグループをキャプチャしないでください。 –

関連する問題