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

Ausführliches Tutorial zur Installation von mysql 5.6.23 winx64.zip

Eine ausführliche Dokumentation zur Installation ...

Vue implementiert den Anruf der PC-Kamera, um Fotos in Echtzeit aufzunehmen

Vue ruft die PC-Kamera auf, um Bilder in Echtzeit...

Einfaches Beispiel für die Verwendung eines Docker-Containers

Inhaltsverzeichnis 1. Ziehen Sie das Bild 2. Ausf...

Basiswissen: Was bedeutet http vor einer Website-Adresse?

Was ist HTTP? Wenn wir eine Website durchsuchen m...

MySQL-Datenbanktabellendesign mit Baumstruktur

Inhaltsverzeichnis Vorwort 1. Basisdaten 2. Verer...

Wie verstecke ich einen bestimmten Text in HTML?

Code zum Ausblenden von Text, Ausblenden eines bes...

Detailliertes Beispiel zum Entfernen doppelter Daten in MySQL

Detailliertes Beispiel zum Entfernen doppelter Da...

Detaillierte Erläuterung der Verwendung des Linux-Befehls seq

01. Befehlsübersicht Der Befehl „seq“ wird verwen...

Einführung in Who-Befehlsbeispiele in Linux

Über wen Zeigt die am System angemeldeten Benutze...