Das hängt davon ab, was Sie tatsächlich meinen. Wenn Sie nur drei nicht identische Zeichen abgleichen wollen (d.h. wenn abb
für Sie gültig ist), können Sie diese negative Vorausschau verwenden:
(?!(.)\1\1).{3}
Zunächst wird festgestellt, dass an der aktuellen Stelle nicht dreimal das gleiche Zeichen folgt. Dann werden diese drei Zeichen verglichen.
Wenn Sie wirklich 3 verschiedene Zeichen zuordnen möchten (nur Dinge wie abc
), wird es ein wenig komplizierter. Verwenden Sie stattdessen diese beiden negativen Lookaheads:
(.)(?!\1)(.)(?!\1|\2).
Triff zuerst ein Zeichen. Dann stellen wir fest, dass diesem nicht das gleiche Zeichen folgt. Wenn ja, wird ein weiteres Zeichen gefunden. Dann stellen wir fest, dass auf dieses weder das erste noch das zweite Zeichen folgt. Dann passen wir ein drittes Zeichen an.
Beachten Sie, dass diese negativen Vorausschauwerte ( (?!...)
) verbrauchen keine Zeichen. Deshalb nennt man sie auch Lookaheads. Sie prüfen nur, was als nächstes kommt (oder in diesem Fall, was ist no kommt als nächstes) und dann macht die Regex da weiter, wo sie aufgehört hat. Hier ist ein guter Leitfaden.
Beachten Sie auch, dass dies auf alles außer Zeilenumbrüchen passt, oder wirklich alles wenn Sie die Option DOTALL oder SINGLELINE verwenden. Da Sie JavaScript verwenden, können Sie die Option einfach durch Anhängen von s
nach das abschließende Begrenzungszeichen des Regexes. Wenn Sie (aus irgendeinem Grund) diese Option nicht verwenden möchten, ersetzen Sie die Option .
s von [\s\S]
(dies entspricht immer einem beliebigen Zeichen).
Aktualisierung:
Nach der Klärung in den Kommentaren wurde mir klar, dass Sie nicht wollen, dass finden. drei nicht identische Zeichen, aber stattdessen wollen Sie behaupten. dass Ihr String nicht enthalten drei identische (und aufeinanderfolgende) Zeichen.
Dies ist etwas einfacher und kommt Ihrer früheren Frage näher, da es nur eine negative Vorausschau erfordert. Wir suchen in der Zeichenkette von Anfang an nach drei aufeinanderfolgenden identischen Zeichen. Da wir aber sicherstellen wollen, dass diese no existieren, verpacken wir dies in eine negative Vorausschau:
^(?!.*(.)\1\1)
Die Vorausschau ist am Anfang der Zeichenkette verankert, so dass dies die einzige Stelle ist, an der wir nachschauen werden. Das Muster im Lookahead versucht dann, drei identische Zeichen ab einer beliebigen Position in der Zeichenkette zu finden (aufgrund der .*
; die identischen Zeichen werden auf die gleiche Weise wie in Ihrer vorherigen Frage abgeglichen). Wenn das Muster diese Zeichen findet, schlägt die negative Vorausschau fehl, und die Zeichenfolge ist ungültig. Wenn keine drei identischen Zeichen gefunden werden können, wird das innere Muster niemals übereinstimmen, so dass der negative Lookahead erfolgreich sein wird.