Heim Web-Frontend js-Tutorial Was ist der Single-Line-Modus? Detaillierte Erläuterung des regulären Einzeilenmodus von JavaScript

Was ist der Single-Line-Modus? Detaillierte Erläuterung des regulären Einzeilenmodus von JavaScript

Apr 21, 2017 am 10:20 AM

In diesem Artikel werden hauptsächlich reguläre JavaScript-Ausdrücke vorgestellt, die auch über einen einzeiligen Modus verfügen. Freunde, die ihn benötigen, können darauf zurückgreifen.

Reguläre Ausdrücke wurden erstmals 1970 von Ken Thompson in seinem verbesserten QED-Editor implementiert Das einfachste Metazeichen „.“ in regulären Ausdrücken passt zu jedem Zeichen außer Zeilenumbrüchen: „

“.“ ist ein regulärer Ausdruck, der zu jedem Zeichen außer passt.

Der obige Satz stammt aus QEDs offizielles Dokument im 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#//.*##
Nach dem Login kopieren

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 bedeutet, erbt Perl die Tradition, Dateien Zeile für Zeile mit vielen Linux-Befehlen zu lesen, wie folgt:

while (<>) {print $_}
Nach dem Login kopieren

_ Am Ende steht auch ein Zeilenumbruchzeichen, daher erbt Perl natürlich die QED-Regel, dass „.“ nicht mit Zeilenumbruchzeichen übereinstimmt. Aber Perl ist schließlich eine Programmiersprache und kein Editor. Die Objekte, mit denen seine regulären Ausdrücke übereinstimmen müssen, sind nicht nur einzelne Textzeilen, sondern können auch mehrzeilige Texte sein eine Voraussetzung für den zeilenübergreifenden Abgleich. Daher hat Perl den regulären Einzelzeilenmodus /s erfunden, der es ermöglicht, auch Zeilenumbrüche zuzuordnen.

Die offizielle Beschreibung des /s-Modifikators in Perl, der zum Aktivieren des Einzelzeilenmodus verwendet wird, lautet „Behandle die Zeichenfolge als einzelne Zeile“. Diese „einzelne Zeile“ sollte so verstanden werden: „kann nur übereinstimmen.“ Im Normalmodus können sich Inline-Zeichen nicht über mehrere Zeilen erstrecken; im Einzelzeilenmodus gibt Perl vor, mehrzeilige Zeichenfolgen als eine Zeile zu behandeln, und behandelt die Newline-Zeichen als Inline-Zeichen, sodass sie mit ihnen übereinstimmen können. Um es anschaulicher auszudrücken: Die folgenden drei Textzeilen

1
2
3
Nach dem Login kopieren

werden als „1n2n3n“ betrachtet. Dies ist die Bedeutung des einzeiligen Modus.

Aber das Schlimmste ist, dass Perl aus dem gleichen Grund (String-Variablen können mehrere Textzeilen enthalten) auch den /m-Modifikator erfunden hat, der den Mehrzeilenmodus darstellt. Die offizielle Beschreibung lautet „Behandeln Sie den String.“ „als mehrere Zeilen“ ist dieses Muster seit der Antike in den regulären JavaScript-Regeln enthalten. „Mehrzeilig“ bedeutet hier: ^- und $-Metazeichen stimmen nicht mit den Positionen vor und nach den Zeilenumbruchzeichen in der Mitte einer Zeichenfolge überein Standardmäßig bedeutet dies, dass die Zeichenfolge immer nur eine Zeile enthält. Sie können sie nach dem Aktivieren des Mehrzeilenmodus abgleichen.

Mit anderen Worten, der einzeilige Modus und der mehrzeilige Modus gelten für unterschiedliche Metazeichen. Personen, die mit regulären Ausdrücken noch nicht vertraut sind, werden durch die beiden scheinbar entsprechenden Begriffe „einzeiliger Modus“ und „mehrzeiliger Modus“ verwirrt sein "Modus"-Konzept, aber tatsächlich ist es mit nicht verwandten Begriffen verwirrend.

Später hatte der Autor von Ruby möglicherweise das Gefühl, dass der reguläre Begriff „Einzelzeilenmodus“ nicht gut verwendet wurde, und nannte den Modus „Mehrzeilenmodus“. ist, let . * und andere reguläre Ausdrücke können mit mehreren Zeilen übereinstimmen, sodass der Modifikator auch /m verwendet (Ruby aktiviert standardmäßig den „Mehrzeilenmodus“, sodass /m nicht belegt ist). Um das Ganze noch schlimmer zu machen, ist es sogar noch chaotischer.

Später war der Python-Autor möglicherweise auch der Meinung, dass der Begriff „Einzelzeilenmodus“ vermieden werden sollte, und gab ihm daher den neuen Namen „dotall“, was bedeutet, dass der Punkt mit allen Zeichen übereinstimmen kann sehr guter Name, und später verwendete auch Java diesen Namen.

Das Obige hat den Verlauf überprüft, den Ursprung des Single-Line-Modus erklärt und erklärt, dass der Name des Single-Line-Modus nicht gut gewählt wurde. V8 hat kürzlich einen ES-Vorschlag der Stufe 3 implementiert: github.com/mathiasbynens/es-regexp-dotall-flag. Dieser Vorschlag führt den /s-Modifikator und das dotAll-Attribut in die JavaScript-Regelmäßigkeit ein Der Modifikator ist von Perl geerbt und es besteht keine Notwendigkeit, einen neuen Modifikator wie /d zu erfinden, der 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):


/foo/s.dotAll // true
/^.{4}$/s.test("\n\r\u2028\u2029") // true
Nach dem Login kopieren

Es ist eigentlich 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. Lassen Sie mich noch einmal klarstellen: Der Mehrzeilenmodus steuert die Leistung von ^ und $, und der Einzeilenmodus steuert die Leistung von „.“ Es besteht keine direkte Beziehung zwischen den beiden.

Die Perl-Sprache, die ursprünglich die verwirrenden Konzepte des Einzeilenmodus und des Mehrzeilenmodus einführte, hat diese beiden Modi in Perl 6 jedoch vollständig gelöscht: „.“ stimmt standardmäßig mit dem Zeilenumbruchzeichen überein, und N können mit jedem Zeichen außer Zeilenumbrüchen übereinstimmen; ^ und $ stimmen immer mit dem Anfang und Ende der Zeichenfolge überein, während die beiden neuen Metazeichen ^^ und $$ eingeführt werden, um mit dem Anfang und Ende der Zeile übereinzustimmen.

Die Alternativen zum Single-Line-Modus [^] oder [sS], die wir in der Vergangenheit verwendet haben, sind nicht völlig nutzlos. Beispielsweise ist es unwahrscheinlich, dass sie in einigen Editoren bereitgestellt werden, die JavaScript-Regelmäßigkeit verwenden (VS Code, Atom). Sie haben die Möglichkeit, die Single-Line-Modus-Schnittstelle zu aktivieren. 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 vonWas ist der Single-Line-Modus? Detaillierte Erläuterung des regulären Einzeilenmodus von JavaScript. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

So implementieren Sie ein Online-Spracherkennungssystem mit WebSocket und JavaScript So implementieren Sie ein Online-Spracherkennungssystem mit WebSocket und JavaScript Dec 17, 2023 pm 02:54 PM

So implementieren Sie mit WebSocket und JavaScript ein Online-Spracherkennungssystem. Einführung: Mit der kontinuierlichen Weiterentwicklung der Technologie ist die Spracherkennungstechnologie zu einem wichtigen Bestandteil des Bereichs der künstlichen Intelligenz geworden. Das auf WebSocket und JavaScript basierende Online-Spracherkennungssystem zeichnet sich durch geringe Latenz, Echtzeit und plattformübergreifende Eigenschaften aus und hat sich zu einer weit verbreiteten Lösung entwickelt. In diesem Artikel wird erläutert, wie Sie mit WebSocket und JavaScript ein Online-Spracherkennungssystem implementieren.

WebSocket und JavaScript: Schlüsseltechnologien zur Implementierung von Echtzeitüberwachungssystemen WebSocket und JavaScript: Schlüsseltechnologien zur Implementierung von Echtzeitüberwachungssystemen Dec 17, 2023 pm 05:30 PM

WebSocket und JavaScript: Schlüsseltechnologien zur Realisierung von Echtzeit-Überwachungssystemen Einführung: Mit der rasanten Entwicklung der Internet-Technologie wurden Echtzeit-Überwachungssysteme in verschiedenen Bereichen weit verbreitet eingesetzt. Eine der Schlüsseltechnologien zur Erzielung einer Echtzeitüberwachung ist die Kombination von WebSocket und JavaScript. In diesem Artikel wird die Anwendung von WebSocket und JavaScript in Echtzeitüberwachungssystemen vorgestellt, Codebeispiele gegeben und deren Implementierungsprinzipien ausführlich erläutert. 1. WebSocket-Technologie

Verwendung von JavaScript und WebSocket zur Implementierung eines Echtzeit-Online-Bestellsystems Verwendung von JavaScript und WebSocket zur Implementierung eines Echtzeit-Online-Bestellsystems Dec 17, 2023 pm 12:09 PM

Einführung in die Verwendung von JavaScript und WebSocket zur Implementierung eines Online-Bestellsystems in Echtzeit: Mit der Popularität des Internets und dem Fortschritt der Technologie haben immer mehr Restaurants damit begonnen, Online-Bestelldienste anzubieten. Um ein Echtzeit-Online-Bestellsystem zu implementieren, können wir JavaScript und WebSocket-Technologie verwenden. WebSocket ist ein Vollduplex-Kommunikationsprotokoll, das auf dem TCP-Protokoll basiert und eine bidirektionale Kommunikation zwischen Client und Server in Echtzeit realisieren kann. Im Echtzeit-Online-Bestellsystem, wenn der Benutzer Gerichte auswählt und eine Bestellung aufgibt

So implementieren Sie ein Online-Reservierungssystem mit WebSocket und JavaScript So implementieren Sie ein Online-Reservierungssystem mit WebSocket und JavaScript Dec 17, 2023 am 09:39 AM

So implementieren Sie ein Online-Reservierungssystem mit WebSocket und JavaScript. Im heutigen digitalen Zeitalter müssen immer mehr Unternehmen und Dienste Online-Reservierungsfunktionen bereitstellen. Es ist von entscheidender Bedeutung, ein effizientes Online-Reservierungssystem in Echtzeit zu implementieren. In diesem Artikel wird erläutert, wie Sie mit WebSocket und JavaScript ein Online-Reservierungssystem implementieren, und es werden spezifische Codebeispiele bereitgestellt. 1. Was ist WebSocket? WebSocket ist eine Vollduplex-Methode für eine einzelne TCP-Verbindung.

JavaScript und WebSocket: Aufbau eines effizienten Echtzeit-Wettervorhersagesystems JavaScript und WebSocket: Aufbau eines effizienten Echtzeit-Wettervorhersagesystems Dec 17, 2023 pm 05:13 PM

JavaScript und WebSocket: Aufbau eines effizienten Echtzeit-Wettervorhersagesystems Einführung: Heutzutage ist die Genauigkeit von Wettervorhersagen für das tägliche Leben und die Entscheidungsfindung von großer Bedeutung. Mit der Weiterentwicklung der Technologie können wir genauere und zuverlässigere Wettervorhersagen liefern, indem wir Wetterdaten in Echtzeit erhalten. In diesem Artikel erfahren Sie, wie Sie mit JavaScript und WebSocket-Technologie ein effizientes Echtzeit-Wettervorhersagesystem aufbauen. In diesem Artikel wird der Implementierungsprozess anhand spezifischer Codebeispiele demonstriert. Wir

Wie ordne ich mehrere Wörter oder Zeichenfolgen mithilfe des regulären Golang-Ausdrucks zu? Wie ordne ich mehrere Wörter oder Zeichenfolgen mithilfe des regulären Golang-Ausdrucks zu? May 31, 2024 am 10:32 AM

Reguläre Golang-Ausdrücke verwenden das Pipe-Zeichen |, um mehrere Wörter oder Zeichenfolgen abzugleichen, wobei jede Option als logischer ODER-Ausdruck getrennt wird. Zum Beispiel: Entspricht „fox“ oder „dog“: fox|dog entspricht „quick“, „brown“ oder „lazy“: (quick|brown|lazy) entspricht „Go“, „Python“ oder „Java“: Go| Python |Java sucht nach Wörtern oder 4-stelligen Postleitzahlen: ([a-zA

Einfaches JavaScript-Tutorial: So erhalten Sie den HTTP-Statuscode Einfaches JavaScript-Tutorial: So erhalten Sie den HTTP-Statuscode Jan 05, 2024 pm 06:08 PM

JavaScript-Tutorial: So erhalten Sie HTTP-Statuscode. Es sind spezifische Codebeispiele erforderlich. Vorwort: Bei der Webentwicklung ist häufig die Dateninteraktion mit dem Server erforderlich. Bei der Kommunikation mit dem Server müssen wir häufig den zurückgegebenen HTTP-Statuscode abrufen, um festzustellen, ob der Vorgang erfolgreich ist, und die entsprechende Verarbeitung basierend auf verschiedenen Statuscodes durchführen. In diesem Artikel erfahren Sie, wie Sie mit JavaScript HTTP-Statuscodes abrufen und einige praktische Codebeispiele bereitstellen. Verwenden von XMLHttpRequest

So verwenden Sie insertBefore in Javascript So verwenden Sie insertBefore in Javascript Nov 24, 2023 am 11:56 AM

Verwendung: In JavaScript wird die Methode insertBefore() verwendet, um einen neuen Knoten in den DOM-Baum einzufügen. Diese Methode erfordert zwei Parameter: den neuen Knoten, der eingefügt werden soll, und den Referenzknoten (d. h. den Knoten, an dem der neue Knoten eingefügt wird).

See all articles