js regulärer Ausdruck Lookahead und Lookbehind und nicht erfassende Gruppierung

js regulärer Ausdruck Lookahead und Lookbehind und nicht erfassende Gruppierung

Kombinieren von Lookahead und Lookbehind mit Erfassungsgruppen

In realen Anwendungsszenarien sind Erfassungsgruppen oder Nichterfassungsgruppen normalerweise auf Lookahead- und Lookbehind-Bedingungen beschränkt. Wenn Sie beispielsweise die Zahl 12345678 formatieren, ist das Ergebnis 12.345.678. Die regelmäßige Umsetzung erfolgt wie folgt:

let formatSum = '12345678'.replace(/\B(?=(?:\d{3})+(?!\d))/g, ',')

Erfassende und nicht erfassende Gruppen

Um Lookahead und Lookbehind zu verstehen, müssen wir zunächst Erfassungsgruppen und Nichterfassungsgruppen verstehen.

In js,

() bedeutet Erfassungsgruppen, () speichert die übereinstimmenden Werte in jeder Gruppe unter Verwendung von $n (n ist eine Zahl, die den Inhalt der n-ten Erfassungsgruppe angibt);

(?:) stellt eine nicht erfassende Gruppe dar. Der einzige Unterschied zu einer erfassenden Gruppe besteht darin, dass der von der nicht erfassenden Gruppe gefundene Wert nicht gespeichert wird.

Am Beispiel des Ausdrucks formatSum sind (?=(?:\d{3})+(?!\d)), (?:\d{3}), (?!\d) alles Gruppen und die zweite Gruppe ist eine nicht erfassende Gruppe.

Nach vorne schauen, zurückblicken, nach vorne schauen und negativ zurückblicken

Im obigen FormatSum-Ausdruck werden „?=“ und „?!“ verwendet, wobei es sich um den sogenannten Lookahead und Negative Lookahead handelt. Um es leichter verständlich zu machen, beginnen wir mit einem einfachen Beispiel.

// Vorausschauend:
A(?=B) //Finde A vor B
// Rückblick:
(?<=B)A //Finde A nach B
// Negativer Vorausblick:
A(?!B) //Finde A, auf das nicht B folgt
// Negativer Rückblick:
(?<!B)A //Suche A, dem kein B vorangeht

Wenn wir uns den Ausdruck formatSum noch einmal ansehen, wird (?:\d{3})+(?!\d) als ein Gesamtausdruck A betrachtet, das heißt,

formatSumme = /\B(?=A)/g //Hier ist A ein Ausdruck, nicht der eigentliche Buchstabe A, nur zum besseren Verständnis

Dies bedeutet, dass das \B vor Ausdruck A abgeglichen wird, und \B gleicht nicht-buchstabliche Grenzen ab. Daher ist ersichtlich, dass die Gesamtfunktion des Ausdrucks darin besteht, die Grenze vor Ausdruck A abzugleichen und zu ersetzen.

Das Gegenstück zu \B ist \b, das einer Buchstabengrenze entspricht. Für Anfänger ist das Konzept der Grenze schwer zu verstehen. Man kann es sich als unsichtbares | vorstellen. In jeder Zeichenfolge mit einer Länge größer oder gleich 2 gibt es eine Grenze. Beispielsweise kann „ab“ als „a|b“ angezeigt werden, mit der Ausnahme, dass das „|“ unsichtbar ist und bei der Zeichenfolgenlänge nicht mitgezählt wird.

'ab'.replace(/\B/, ',')
// a,b

Als nächstes schauen wir uns Teil A des Ausdrucks an: (?:\d{3})+(?!\d) .

Erstens stellt ?: eine nicht erfassende Gruppe dar, \d{3} stellt 3 Ziffern dar und (?:\d{3})+ stellt 3, 6, 9, 12... Ziffern dar;

(?!\d) ist ein negativer Vorausschaueffekt, d. h. es muss mit (?:\d{3})+ übereinstimmen, auf das keine Zahl folgt. Zusammenfassend:

(?:\d{3})+(?!\d)  

Stimmt mit 3*n (n=1-Schritten) Ziffern in „12345678“ überein, die keine Zahlen sind, d. h. „678“, „345678“

Das Ergebnis ist also:

formatSumme = '12345678'.replace(/\B(?=(?:\d{3})+(?!\d))/g, ',')

Stimmt mit der Nicht-Buchstabengrenze vor den 3*n (n=1, n++) Ziffern in „12345678“ überein, die keine Zahlen sind.
Das heißt, die nicht-buchstablichen Grenzen vor ,678‘ und ,345678‘ werden abschließend durch Kommas ersetzt.
Das heißt, vor „3“ und „6“ muss ein Komma eingefügt werden.

Im Augenblick

'12345678'.replace(/\B(?=(?:\d{3})+(?!\d))/g, ',') === '12,345,678'
// WAHR

Zusammenfassen

Dies ist das Ende dieses Artikels über Lookahead-, Lookbehind- und nicht erfassende Gruppen in JS-regulären Ausdrücken. Weitere Informationen zu Lookahead-, Lookbehind- und nicht erfassenden Gruppen in JS-regulären Ausdrücken finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den verwandten Artikeln weiter unten. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Detaillierte Erklärung der praktischen Anwendung regulärer Ausdrücke in JavaScript
  • js verwendet reguläre Ausdrücke zum Filtern von Jahres-, Monats- und Tagesbeispielen
  • Einfache Überprüfungsmethode für reguläre Ausdrücke von js
  • Js verwendet reguläre Ausdrücke, um Klammern aus Zeichenfolgen zu entfernen
  • JavaScript verwendet reguläre Ausdrücke, um die Registrierung und Anmeldeüberprüfung zu implementieren
  • Erläuterung regulärer Ausdrücke in JavaScript

<<:  IE6 implementiert min-width

>>:  Detailliertes Tutorial zur Installation und Konfiguration von MySql5.7 unter Ubuntu 20.04

Artikel empfehlen

Grafisches Tutorial zur Installation und Konfiguration von MySQL 8.0.11

Die Installations- und Konfigurationsmethoden von...

Lösung für mobile Browser, die die Position nicht unterstützen: Fix

Die konkrete Methode ist wie folgt: CSS Code Code...

isPrototypeOf-Funktion in JavaScript

Inhaltsverzeichnis 1. istPrototyp von() Beispiel ...

Zugriffsvorgang im MySQL-Befehlszeilenmodus MySQL-Datenbankvorgang

Nutzungsumgebung Geben Sie im cmd-Modus mysql --v...

Webdesign-Kenntnisse: Problem der adaptiven Höhe von Iframes

Manche Leute sind vielleicht noch nicht auf dieses...

Reiner CSS-Beispielcode für Meteorschauer-Hintergrund

GitHub-Adresse, Sie können es mit einem Stern mar...

So zeigen Sie Bildinformationen in Docker an

In diesem Artikel müssen wir lernen, wie man Bild...

Schritte zum Anpassen des Symbols in Vue

ant-design-vue passt die Verwendung von Ali Iconf...

Wie InnoDB Transaktionsisolationsebenen geschickt implementiert

Vorwort Im vorherigen Artikel „Detaillierte Erklä...

Eine kurze Diskussion über die Docker-Compose-Netzwerkeinstellungen

Tutorial zur Netzwerknutzung Offizielle Website d...