In diesem Artikel wird hauptsächlich der reguläre Ausdruck von JavaScript vorgestellt, der auch über einen einzeiligen Modus verfügt. Freunde, die ihn benötigen, können sich zuerst auf
Regulärer Ausdruck beziehen 1970 von Ken Thompson in seinem verbesserten QED Editor implementiert, entsprach das einfachste Metazeichen „.“ in regulären Ausdrücken zu jedem Zeichen außer Zeilenumbrüchen:
„.“ Regulärer Ausdruck, der mit jedem Zeichen außer
Der obige Satz stammt aus dem offiziellen Dokument von QED aus dem Jahr 1970, das möglicherweise das erste reguläre Dokument in der Geschichte ist.
Warum gibt es eine solche Regel? Dies liegt daran, dass QED Dateien in Zeileneinheiten bearbeitet und das Newline-Zeichen am Ende der Zeile auch im Inhalt dieser Zeile enthalten ist. Wenn Sie beispielsweise alle einzeiligen Kommentare in einem Codeabschnitt löschen möchten, können Sie den folgenden Befehl in QED verwenden:
1,$s#//.*##
Wenn „.“ mit dem Newline-Zeichen übereinstimmen kann, dann mit dem Newline-Zeichen Das Zeichen wird ebenfalls gelöscht und führt dazu, dass diese Zeilen mit der nächsten Zeile zusammengeführt werden, was normalerweise nicht das ist, was wir wollen. Obwohl es auf dem aktuellen Betriebssystem keinen QED-Befehl zum Testen gibt, haben wir immer noch VIM, und das „.“ in VIM kann aus demselben Grund nicht mit dem Zeilenumbruchzeichen übereinstimmen.
Anders als in Node, wo das Lesen einer Datei normalerweise das Lesen der gesamten Datei auf einmal beinhaltet, erbt Perl die Tradition vieler Linux-Befehle, die Dateien Zeile für Zeile lesen, wie folgt:
while (<>) {print $_}
werden als „1n2n3n“ betrachtet. Dies ist die Bedeutung des einzeiligen Modus.
1 2 3
https://
github.com/mathiasbynens/es-regexp-dotall-flag Dieser Vorschlag führt den /s-Modifikator und das dotAll-Attribut in die JavaScript-Regelmäßigkeit ein Das Attribut wird von Python und Java gelernt und der Modifikator /s wird von Perl geerbt. Es besteht keine Notwendigkeit, hier einen neuen Modifikator wie /d zu erfinden, was die Sache nur komplizierter macht. Der spezifische Effekt von /s in JavaScript besteht darin, dass „.“ mit vier Zeilenabschlüssen übereinstimmt, die vorher nicht übereinstimmen konnten: n (Zeilenvorschub), r (Wagenrücklauf), u2028 (Zeilentrenner), u2029 (Absatztrenner):Tatsächlich ist es eine sehr einfache Sache, aber einige Schüler, die nicht mit anderen regulären Ausdrücken als JavaScript vertraut sind, könnten verwirrt sein, wenn sie diesen neuen Modus lernen: Multi- Die Steuerung im Zeilenmodus ist die Leistung von ^ und $, der Einzelzeilenmodus steuert die Leistung von „.“ und es besteht keine direkte Beziehung zwischen den beiden.
Die Perl-Sprache, die ursprünglich die verwirrenden Konzepte des Einzelzeilenmodus und des Mehrzeilenmodus einführte, hat diese beiden Modi in Perl 6 jedoch vollständig gelöscht: „.“ stimmt standardmäßig mit Newline-Zeichen überein, und N kann mit Newline-Zeichen übereinstimmen Alle Zeichen außer ^ und $ stimmen immer mit dem Anfang und dem Ende der Zeichenfolge überein, während die beiden neu eingeführten Metazeichen ^^ und $$ mit dem Anfang und dem Ende der Zeile übereinstimmen.
Die Single-Line-Modus-Alternativen [^] oder [sS], die wir in der Vergangenheit häufig verwendet haben, sind nicht völlig nutzlos. In einigen Editoren, die JavaScript-Regelmäßigkeit verwenden (VS Code, Atom), ist dies beispielsweise der Fall Es ist unwahrscheinlich, dass Sie eine Schnittstelle zur Aktivierung des Single-Line-Modus bereitstellen. Wenn wir jedoch über die reguläre Funktion im Editor sprechen, ist die reguläre Funktion des in JavaScript implementierten Editors immer noch zu schwach. Beispielsweise können bestimmte Modi nicht im regulären Code selbst aktiviert werden, z. B. in Sublime Python-regulärer Code), innerhalb des regulären Codes. Verwenden Sie (?s), um den Dotall-Modus zu aktivieren. Sie können beispielsweise (?s)/*.+?*/ verwenden, um alle mehrzeiligen Kommentare abzugleichen.
Das obige ist der detaillierte Inhalt vonEinzeiliger JavaScript-Ausdruck mode_regular. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!