Heim >Web-Frontend >js-Tutorial >Zusammenfassung der Javascript-Kenntnisse zur Definition regulärer Ausdrücke (Grammatik)_Javascript

Zusammenfassung der Javascript-Kenntnisse zur Definition regulärer Ausdrücke (Grammatik)_Javascript

WBOY
WBOYOriginal
2016-05-16 15:21:05982Durchsuche

In diesem Artikel geht es um die Definition (Grammatik) regulärer Javascript-Ausdrücke. Teilen Sie es als Referenz mit allen. Die Details lauten wie folgt:

Es gibt zwei Möglichkeiten, reguläre Ausdrücke zu definieren: Eine besteht darin, RegExp() direkt aufzurufen, und die zweite darin, es direkt mit Literalen zu definieren, d. h. var re = /regular Rule/;

Beide Definitionsmethoden rufen im Wesentlichen die RegExp()-Methode auf

Beim Aufruf desselben regulären Codes ist das Verhalten in ECMAScript3 und ECMAScript5 völlig unterschiedlich

function reg(){
 var re = /\sjavascript/;
 return re;
}

Rufen Sie die reg()-Methode mehrmals in ECMAScript3 bzw. ECMAScript5 auf

In ECMAScript3 wird dasselbe RegExp-Objekt aufgerufen, aber in ECMAScript5 wird ein anderes RegExp-Objekt aufgerufen, da bei jeder Ausführung in EXCMAScript5 ein neues RegExp-Objekt generiert wird

Das Programm in ECMAScript3 birgt also versteckte Gefahren, denn solange das Objekt an einer Stelle geändert wird, ändern sich alle Orte, die dieses Objekt aufrufen.

1. Direkter Charakter

stimmt im Allgemeinen direkt mit Zeichen in regulären Ausdrücken überein, z. B.

/javascript/
Entspricht direkt dem Zeichen Javascript

unterstützt auch die Zuordnung von Nicht-Buchstaben-Zeichen, wie zum Beispiel:

o NUL-Zeichen (u0000)

t Tabulatorzeichen (u0009)

n Zeilenumbruchzeichen (u000A)

v Vertikale Registerkarte (u000B)

f Formularvorschubzeichen (u000C)

r Wagenrücklaufzeichen (u000D)

xnn Lateinisches Zeichen, das durch die Hexadezimalzahl nn angegeben wird, zum Beispiel entspricht x0A

uxxxx Unicode-Zeichen, das durch die Hexadezimalzahl xxxx angegeben wird, z. B. u0009 entspricht

cX Steuerzeichen ^X, zum Beispiel cJ entspricht dem Zeilenumbruchzeichen n

In regulären Ausdrücken gibt es einige Satzzeichen mit besonderer Bedeutung, die mit ''

maskiert werden müssen

^$.* ?=!:|/()[]{}

2. Charakterklasse

[...] Beliebiges Zeichen in eckigen Klammern

[^...] Jedes Zeichen, das nicht in eckigen Klammern steht

. Beliebiges Zeichen

w Jedes aus ASCII-Zeichen bestehende Wort, äquivalent zu [a-zA-Z0-9]

W Jedes Wort, das nicht aus ASCII-Zeichen besteht, entspricht [^a-zA-Z0-9]

s Beliebiges Unicode-Leerzeichen

S Jedes Nicht-Unicode-Leerzeichen. Beachten Sie, dass w und S unterschiedlich sind

d Beliebiger ASCII-Wert, äquivalent zu [0-9]

D Beliebiges Zeichen außer ASCII-Zahlen, äquivalent zu [^0-9]

[b] Backspace-Literal (Sonderfall)

3. Wiederholen (Anzahl)

? 0 oder 1 Mal

1 oder mehrmals

* Beliebig oft

{n} n-mal

{m,n} Minimum m-mal, maximal n-mal

{n,} n-mal oder öfter

Der Standardwert für reguläre Ausdrücke ist Greedy Matching

Zum Beispiel [a b ] Wenn Sie mit aaabb übereinstimmen möchten, stimmt es nicht mit ab, aab usw. überein, sondern nur mit aaabb

[a ?b ?] Dies wird mit aaab übereinstimmen. Warum gibt es diesen Unterschied?

Antwort: ? Machen wir einen regulären Non-Greed-Matching, dann passt b hier nur zu einem b, warum also ein Match 3? Dies liegt daran, dass beim Mustervergleich mit regulären Ausdrücken immer nach der ersten möglichen Übereinstimmungsposition in der Zeichenfolge gesucht wird.

4. Gruppierung | |. wird verwendet, um optionale Zeichen wie [ab|cd] zu trennen, die entweder mit ab oder cd übereinstimmen können.

: Die Reihenfolge der versuchten Übereinstimmung ausgewählter Elemente ist links → rechts [a|ab]: Wenn a übereinstimmt, wird ab nicht abgeglichen, auch wenn ab besser übereinstimmt

() 1. Einzelne Elemente werden als Unterausdrücke /java(script)?/ behandelt. Kann mit Javascript und Java übereinstimmen. Das heißt, der Klammerteil bildet einen Unterausdruck, und Sie können | * ? und andere Operationen für den Unterausdruck 2. Definieren Sie Untermuster im vollständigen Muster. Letzteres kann sich auf den in Klammern eingeschlossenen Ausdruck beziehen. /(['"])[a-z]1/ 1 bezieht sich auf den Ausdruck in der ersten Klammer, also zitiert [. '"]

3. Verweisen Sie hinten auf den vorherigen Unterausdruck

Hinweis

: /['"][a-z]['"]/ Dieser reguläre Ausdruck bedeutet ein einfaches Anführungszeichen oder ein doppeltes Anführungszeichen plus einen Kleinbuchstaben plus das vorherige Single Anführungszeichen oder doppelte Anführungszeichen und die vorangehenden und folgenden einfachen und doppelten Anführungszeichen werden nicht abgeglichen. Wenn Sie eine Übereinstimmung wünschen, können Sie Folgendes schreiben: [(['"])[a-z]1]

Zahlen hinzufügen Sie können den Ausdruck in den vorherigen Klammern zitieren

5. Passende Position (Ankerpunkt) angeben

^ Entspricht dem Anfang einer Zeichenfolge. Beim mehrzeiligen Abruf entspricht es dem Anfang einer Zeile $ Entspricht dem Ende einer Zeichenfolge. Beim mehrzeiligen Abruf entspricht es dem Ende einer Zeile

b Entspricht der Grenze eines Wortes, kurz gesagt, es ist die Position zwischen den Zeichen w und W oder die Position zwischen dem Zeichen w und dem Anfang oder Ende der Zeichenfolge

B Entspricht der Position einer Nicht-Wort-Grenze

(?=p) Die Vorwärts-Lookahead-Behauptung mit der Breite Null erfordert, dass die folgenden Zeichen mit p übereinstimmen, darf aber nicht die Zeichen enthalten, die mit p

übereinstimmen

(?!p) Eine negative Lookahead-Behauptung mit der Breite Null erfordert, dass das nächste Zeichen nicht mit p übereinstimmt

6. Modifikatoren

steht auf der rechten Seite des regulären Ausdrucksliterals //

Ich führe einen Vergleich ohne Berücksichtigung der Groß-/Kleinschreibung durch

g führt eine globale Übereinstimmung durch, kurz gesagt, es findet alle Übereinstimmungen, anstatt anzuhalten, nachdem die erste gefunden wurde

m Mehrzeiliges Übereinstimmungsmuster, ^ entspricht dem Anfang einer Zeile und dem Anfang einer Zeichenfolge, $ entspricht dem Ende einer Zeile und dem Ende einer Zeichenfolge /java$/m kann mit javanfunc übereinstimmen

Hinweis: Wenn der reguläre Ausdruck global ist, wird der aktuell festgelegte lastIndex jedes Mal auf die aktuelle Position gesetzt, wenn exec() und test() ausgeführt werden, also an der Position von lastIndex Es ist am besten, lastIndex bei jeder Ausführung auf 0 zu setzen.

Ich hoffe, dass dieser Artikel für alle hilfreich ist, die sich mit der JavaScript-Programmierung befassen.

Stellungnahme:
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