2016-11-22 2 views
2

Ich möchte keine Zeichenfolge Wiederholung finden. Ich habe folgenden Code:Regex - String Wiederholung von min Länge

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

Es findet 'abc' Replikation in 'weabcabcjy', aber es findet auch 'll' in 'all'. Ich hätte gerne Regex, um die minimale Länge der Replikation auf 2 Zeichen zu begrenzen. Es bedeutet, dass es immer mindestens 2 Zeichen gegen andere zwei vergleicht.

Antwort

2

.+? Das Muster findet keine ein oder mehr Zeichen anders als Zeilenumbruch-Zeichen, so ll in all wird abgestimmt erhalten, da die erste l wird in der Gruppe 1 und der zweiter der aufgenommen wird mit \1+ abgestimmt werden.

nur um Wiederholungen von 2+ Charakter Brocken finden Sie einen faulen Begrenzung quantifier {2,}? verwenden:

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

Siehe the regex demo.

Die (.{2,}?)\1+ Muster in Gruppe entsprechen und erfassen werden 1 beliebige zwei oder mehr, aber so wenig wie möglich, andere Zeichen als Zeilenumbruch Symbole und dann 1 oder mehr gleichen aufeinanderfolgende Unterketten.

+0

Ich habe versucht (.?) {2,} \ 1+ aber dieser Weg ist mir nicht eingefallen. Vielen Dank. – MakoBuk

+0

Oh, das ['(.?) {2,} \ 1 +'] (https://regex101.com/r/dIjvQ3/1) sieht gruselig aus. Die Quantifizierung eines optionalen Musters führt zu einem passenden String. Vermeiden Sie die Erfassung wiederholter Gruppen in JS, es sei denn, Sie versuchen, aufeinanderfolgende Wiederholungen mit einem einzigen Vorkommen zu entfernen. –