Semantik und Verwendung von RegExp-Objekten:
Überprüfen Sie Zeichenfolgenübereinstimmungen, erhalten Sie einen Teil des Inhalts in der Zeichenfolge und erstellen Sie eine neue Zeichenfolge basierend auf der ursprünglichen Zeichenfolge (einschließlich Hinzufügen, Löschen und Ändern).
Es gibt zwei Möglichkeiten, ein RegExp-Objekt zu erstellen:
Verwenden Sie Literale wie /w/g
Verwenden Sie einen Konstruktor, z. B. new RegExp(/w/)
Beim Erstellen von RegExp-Objekten sind mehrere Punkte zu beachten:
Literale werden häufig zum Erstellen statischer RegExp-Objekte verwendet, die nicht zur Laufzeit generiert werden.
Flags können direkt nach dem Literal hinzugefügt werden, um die Ausführungsergebnisse übereinstimmender Zeichenfolgen einzuschränken. Zu den häufig verwendeten Flags gehören g und i, die zur Darstellung des globalen Matchings (global) bzw. des case-insensitiven Matchings (case-insensitive) verwendet werden.
Der erste Parameter des RegExp-Konstruktors stellt das Muster des Objekts bereit. Wenn Muster ein RegExp-Literal ist, kann der zweite Parameter (d. h. der das Flag angibt) nicht bereitgestellt werden. Wenn Muster eine Zeichenfolge ist, können Sie den zweiten Parameter verwenden
Der RegExp-Konstruktor wird häufig zum Erstellen dynamischer RegExp-Objekte verwendet, die zur Laufzeit generiert werden.
Wenn das Muster von RegExp eine Zeichenfolge ist, müssen alle „“ im Literal als „\“ geschrieben werden, da „“ in einer Zeichenfolge maskiert werden muss. Die beiden oben genannten Methoden erstellen ein Javascript-Objekt, also /w/ == /w/Return false
RegExp-objektbezogene Funktionen:
Um die Übereinstimmung einer Zeichenfolge zu überprüfen, können Sie die Methode regExp.test(string) verwenden, die prüft, ob die Zeichenfolge mit dem von regExp bereitgestellten Muster übereinstimmt. Sie können auch die Methode string.search(regExp) verwenden, die -1 zurückgibt, wenn die beiden nicht übereinstimmen.
Um einen Teil der Zeichenfolge abzurufen, können Sie die Methode regExp.exec(string) verwenden, oder Sie können die Methode string.match(regExp) verwenden. Um eine neue Zeichenfolge auf der ursprünglichen Zeichenfolge zu erstellen, verwenden Sie normalerweise string.replace(searchValue, (replaceValue)-Methode
Die Semantik des Musters wird im RegExp-Objekt bereitgestellt:
RegExp kann mehrere durch „|“ getrennte Alternativen definieren. Wenn also „|“ vorhanden ist, unterteilt es den RegExp zunächst in mehrere Teile Die aus Begriffen bestehenden Begriffe sind unterteilt in Behauptung (zur Positionsqualifizierung), Atom (Übereinstimmungseinheit) und Atom mit Quantor (Modifikator).
Die Behauptung ist in „^“ unterteilt, das zum Abgleichen des Zeichenfolgenanfangs verwendet wird (d. h. wenn das Flag „m“ enthält), zum Abgleichen des Zeilenanfangs Ende der Zeichenfolge. In MultiInput (d. h. wenn das Flag m enthält) kann es auch mit dem Ende einer Zeile übereinstimmen. „b“ wird verwendet, um ein w- und W-Intervall abzugleichen beliebiger Inhalt in der Zeichenfolge, wird jedoch nur zur Bestimmung der Übereinstimmung einer Position verwendet.
Die Situation des Atoms ist komplizierter. Schauen wir uns zunächst den Quantifizierer des Atoms an, der * + ? {n} {m,} {m,n} umfassen kann, wobei * bedeutet, dass das Atom 0 oder mehr Wiederholungen haben kann, + bedeutet 1 oder mehr Für die oben genannten Wiederholungen bedeutet ? 0 oder 1 Mal, {n} bedeutet genau n Wiederholungen, {m,} bedeutet m oder mehr Wiederholungen, {m,n} bedeutet, dass die Anzahl der Wiederholungen zwischen m und n liegt (einschließlich). m und n), dem obigen Quantifizierer kann auch ein ? folgen, um den nicht gierigen Modus zu starten. Die Bedeutung dieses Modus werde ich später erklären.
Atom enthält Musterzeichen (normale Zeichen, d. h. Zeichen ohne besondere Semantik im Muster, die wörtlich abgeglichen werden)
„.“ stimmt mit allen Nicht-Zeilenabschlusszeichen überein
AtomEscape enthält die Zahl 1 (wird in den vorangehenden Klammern verwendet, um auf die erfolgreiche Übereinstimmung zu verweisen). Verweise auf einige Zeichen n f r t v xNN uXXXX cX usw. Einige Zeichen mit besonderer Bedeutung, wie z. B. d D s S w W
CharacterClass enthält zwei Formen: [...] und [^...]. Es kann viele Zeichen enthalten, z. B. -, n und andere Zeichenreferenzen, b, d und andere Sonderzeichen. Beachten Sie, dass sich die Semantik von einem bestimmten Zeichen zum anderen ändert, wenn es Zeichen um „-“ gibt. Wenn links oder rechts von „-“ keine Zeichen stehen, stellt „-“ nur den Bindestrich dar.
(Gruppe): Wenn Sie die Gruppierung im oben genannten Modus durchführen, können Sie sie nach der Gruppierung mit Quantifier ändern.
(?:Gruppe) wird nur als Gruppe verwendet. Der von der Gruppe übereinstimmende Inhalt wird nicht aufgezeichnet und nicht in 1..n enthalten
(?=Gruppe), erfordert einen Abgleich, schließt den Gruppenübereinstimmungsinhalt jedoch nicht in die zurückgegebene Übereinstimmungszeichenfolge ein
(?!group) erfordert keinen Abgleich und schließt den Gruppenabgleichsinhalt nicht in die zurückgegebene Abgleichszeichenfolge ein. Jetzt möchte ich über die beiden wichtigeren Betriebsmodi von RegExp sprechen:
Die Matching-Alternative erfolgt immer von links nach rechts Bei der ersten Übereinstimmung werden keine weiteren Übereinstimmungen mehr versucht, z. B.
/ab|abc/.exec("abc"). Die obige Zeichenfolge "abc" stimmt nur mit ab im Muster überein.
Beim Abgleich ist dies immer normal. Wenn nach Quantifier kein ? hinzugefügt wird, wird der gierige Modus verwendet. Nach dem Hinzufügen von ? wird der nicht gierige Modus verwendet. Wenn beispielsweise
/w+bc/.exec("abcbcbc") abgeglichen wird, wird dies der Fall sein Passen Sie immer zuerst so viele Übereinstimmungen wie möglich an (d. h. Greedy-Modus), sodass es mit „abcbcbc“ übereinstimmt. Wenn es in
/w+?bc/.exec(„abcbcbc“) geändert wird, werden so wenige wie möglich übereinstimmen ( d. h. nicht gieriger Modus), sodass nur „abc“ gefunden wird.
Für allgemeine Anforderungen an das Parsen von Zeichenfolgen können Sie im Allgemeinen die Methoden exec oder match zum Parsen verwenden. Wenn die Zeichenfolge groß ist, müssen Sie häufig eine Schleifenstruktur zum Parsen verwenden. RegExp ist in Kombination mit while und anderen Anweisungen sehr leistungsfähig.
Wenn Sie eine vorhandene Zeichenfolge durch Ändern in eine andere umwandeln möchten, verwenden Sie im Allgemeinen immer die Ersetzungsmethode. Diese Methode ist meiner Meinung nach die wichtigste Methode in RegExp. Sie kann fast alle Formen annehmen Anforderungen an die Änderung von Zeichenfolgen.