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

Ein Artikel zum Verständnis von MySQL Index Pushdown (ICP)

Inhaltsverzeichnis 1. Einleitung 2. Grundsatz Pra...

So legen Sie die Anzahl der MySQL-Verbindungen fest und ermitteln sie

Holen Sie sich die Anzahl der Verbindungen --- Ho...

Teilen Sie einige wichtige Interviewfragen zum MySQL-Index

Vorwort Ein Index ist eine Datenstruktur, die ein...

So verwenden Sie die Concat-Funktion in MySQL

Wie unten dargestellt: //Fragen Sie das Jahr und ...

Einfache Implementierung von Mini-Vue-Rendering

Inhaltsverzeichnis Vorwort Ziel Erster Schritt: S...

Native Js-Implementierung des Kalender-Widgets

In diesem Artikelbeispiel wird der spezifische JS...

Implementierung von LNMP für die separate Bereitstellung von Docker-Containern

1. Umweltvorbereitung Die IP-Adresse jedes Contai...

Detaillierte Erläuterung des MySQL 5.7.9-Shutdown-Syntaxbeispiels

mysql-5.7.9 bietet endlich eine Shutdown-Syntax: ...

Zusammenfassung der Wissenspunkte zu den Linux-Befehlen ps und pstree

Der ps-Befehl in Linux ist die Abkürzung für „Pro...

So setzen Sie das Root-Passwort in mysql8.0.12 zurück

Wenn Sie nach der Installation der Datenbank das ...

Tipps zur Verwendung kleiner HTML-Tags

Phrasenelemente wie <em></em> können d...