Die vorherigen Wörter
Die grundlegende Syntax regelmäßiger Ausdrücke in JavaScript wurde früher eingeführt. Die Regexp -Klasse von JavaScript repräsentiert reguläre Ausdrücke. Sowohl String als auch Regexp definieren Methoden. Die Verwendung regulärer Ausdrücke kann leistungsstarke Musteranpassungen, Abrufen von Text und Ersatz durchführen. In diesem Artikel werden Regexp -Objekte von regelmäßigen Ausdrücken und regelmäßigen Ausdrucksformen eingeführt
Attribute und Methoden
Objekt
Reguläre Ausdrücke in JavaScript werden von Regexp -Objekten dargestellt, und es gibt zwei Möglichkeiten, sie zu schreiben: Eine ist die wörtliche Methode; Das andere ist die Konstruktor -Methode
Perl -Schreibmethode
Regelmäßige Expression Literales Schreiben, auch als Perl -Schreiben bezeichnet, da die regulären Ausdrucksmerkmale von JavaScript von Perl entnommen werden
Regelmäßige Expression Literale sind definiert als Zeichen, die zwischen einem Paar Schrägstrichen (/) und 3 Flags enthalten sind, können festgelegt werden
var expression = /muster /flags;
Das passende Muster regulärer Ausdrücke unterstützt die folgenden 3 Flags:
g: bedeutet globales Muster, d. H. Das Muster wird auf alle Zeichenfolgen angewendet, anstatt sofort anzuhalten, wenn das erste Match gefunden wird
I: Zeigt den Fall-Insensitiv-Modus an, dh der Fall des Musters und der Zeichenfolge wird bei der Bestimmung der Übereinstimmung ignoriert.
M: repräsentiert ein Multilinmuster, dh wenn das Ende einer Textlinie erreicht ist, wird weiterhin nach einem Element suchen, das dem Muster in der nächsten Zeile entspricht.
// Übereinstimmung mit allen Instanzen von 'at' der String var p =/at/g; // test () gibt einen booleschen Wert zurück, um anzuzeigen, ob die Übereinstimmung mit Konsole.log (P.Test ('ata')) angezeigt wird; // TrueConsole.log (P.Test ('ABA'); // False False False False.Regexp -Konstruktor
Wie gewöhnliche integrierte Objekte unterstützen auch die regelmäßigen Expressionsobjekte von Regexp die Form des neuen+regexp () -Konstruktors.
Der Regexp -Konstruktor empfängt zwei Parameter: das übereinstimmende Stringmuster und die optionale Flag -Zeichenfolge (Flags). Die drei Flaggen der Flaggenzeichenfolge und des Literales haben die gleiche Bedeutung: 'G', 'I', 'M'
Beide Parameter des Regexp -Konstruktors sind Zeichenfolgen. Und jeder Ausdruck, der unter Verwendung von wörtlicher Form definiert ist, kann Konstruktoren verwenden
// übereinstimmen alle Instanzen von 'at' des String var p1 =/at/g; // wie oben wie oben var p2 = new regexp ('at', 'g');[Anmerkung] Die Spezifikation von ECMAScript3 sieht vor, dass eine regelmäßige Ausdrucks direkte Menge in ein Regexp -Objekt konvertiert wird, wenn es darauf ausgeführt wird. Jede Operation des regulären Ausdrucks direkten Ausdrucksgrößen, der durch denselben Code dargestellt wird, gibt dasselbe Objekt zurück. Die Spezifikation der ECMAScript5 entgegengesetzte Bestimmungen, und der reguläre Ausdruck, der durch denselben Code dargestellt wird, wird jedes Mal direkt gezählt.
Alle Operationen geben neue Objekte zurück. IE6-8 wurde immer gemäß der Spezifikation der ECMAScript5 implementiert, sodass kein Kompatibilitätsproblem vorliegt
Da die Literale der regulären Ausdrücke keine Variablen unterstützen, können Sie den Regexp -Konstruktor nur verwenden, um die Variablen in die Parameter des Regexp -Konstruktors als Stringspleißung zu spleißen, wenn Variablen auftreten.
【Tipps】 Element durch Klassenname erhalten
Funktion getbyClass (obj, className) {var elements = obj.getElementsByTagName ('*'); var result = []; var muster = new regexp ('(^| // s)' + className + '(// s | $)'); für (var i = 0; i <Elements.length; i ++) {if (muster.test (Elemente [i] .ClassName)) {result.push (Elemente [i]); }} Rückgabeergebnis;}Instanzeigenschaften
Jedes Regexp -Instanzobjekt enthält die folgenden 5 Eigenschaften
Global: Boolean Value gibt an, ob das G -Flag -Ignorecase: Booleaner Wert angibt, ob das I -Flag -Flag LastIndex: Integer die Zeichenposition der Suchen Sie nach der nächsten Übereinstimmung an. Es zählt von 0 Multiline: Boolean -Wert zeigt an, ob die Flag -MSource: String -Darstellung des regulären Ausdrucks, der in der buchstäblichen Form zurückgeführt wird, anstatt das im Konstruktor übergebene Stringmuster
var muster = new regexp ('// [bc //] at', 'i'); console.log (muster.global); // falseconsole.log (mustertilecase); // true console.log (muster.multilin); // falseconsole.log (muster.lastindex); // 0console.log (muster.source); // '/[bc/] at'Wenn Sie die Funktion exec () oder test () von regexp verwenden und das globale Muster 'G' festlegen, beginnt die Übereinstimmung des regulären Ausdrucks von der letzten Position in der letzten Index, und der letzteIndex wird zurückgesetzt, nachdem jeder Untermatch erfolgreich ist. Auf diese Weise können Sie wiederholt in der Zeichenfolge iterieren und jedes Matching -Ergebnis in Sequenz finden. Wenn Sie jedoch die gleiche REGEXP EXEC () oder test () für verschiedene Zeichenfolgen aufrufen müssen, kann diese Variable auch unerwartete Übereinstimmungsergebnisse bringen. Wenn Sie die Zeichenfolge ersetzen, sollten Sie daher den letzten Index von Regexp ausdrücklich auf 0 festlegen
// exec () Methode gibt die Übereinstimmung in einem Array var p = // w/g zurück; var s = 'AB'; console.log (P. Lastindex); // 0console.log (P.exec (s)); // ['a'] console.log (P. Lastindex); // 1console.log (log (log (log) (P. lastindex); P.exec (s)); // ['b'] console.log (p.lastindex); // 2console.log (p.exec (s)); // nullconsole.log (p.lastindex); // 0
var p = // w/g; var s1 = 'ab'; var s2 = 'ba'; console.log (p.lastindex); // 0console.log (p.exec (s1)); // ['a'] console.log (p.lastIndex); // 1console.log (P.exec (S2)); // ['A'] console.log (P.lastindex); // 2
Konstruktoreigenschaften
Regexp -Konstruktoreigenschaften gelten als statische Eigenschaften, die je nach dem neuesten durchgeführten regulären Expressionsvorgang variieren.
Es gibt zwei Möglichkeiten, auf sie zuzugreifen, nämlich lange Attributnamen und kurze Attributnamen. Die meisten kurzen Attributnamen sind keine gültigen ECMascript -Kennungen, daher müssen sie über die Syntax für die Quadratklasse zugegriffen werden.
Long Attribut Name kurzer Attributname Eingabe $ _ Die letzte Zeichenfolge, die LastMatch $ und das letzte Spiel LastParen $+ Die letzte Spiel Last Match erfasst Gruppen linkscontext $ `Eingangstext vor Lastmatch Multiline $* boolean Wert an, ob alle Ausdrücke Multiline Muster RightContext $ 'Der Text nach Lastmarch in der Eingabe -String -String verwenden
Unter Verwendung dieser Eigenschaften können spezifischere Informationen aus den Operationen extrahiert werden, die von der Exec () -Methode oder der test () -Methode durchgeführt werden
// test () wird verwendet, um zu testen, ob eine Zeichenfolge mit einem regulären Ausdruck übereinstimmt, und gibt einen booleschen Wert var text = 'Dies war ein kurzer Sommer'; var muster =/(.) Hort/g; if (mustertest (text)) {console.log (Regexp.input); // 'Dies war ein kurzer Sommer. console.log (regexp.rightContext); // 'summer' console.log (regexp.lastMatch); // 'Short' Console.log (regexp.lastparen); // 's' console.log (regexp.multiline) // false console.log (regexp [$ $ $ $ ". console.log (regexp ['$ `']); // 'Dies war ein' console.log (regexp ['$'"]); // 's summer' console.log (regexp ['$ &']); // 'Short' console.log (regexp ['$+']; }JavaScript verfügt über 9 Konstruktoreigenschaften zum Speichern von Erfassungsgruppen. Diese Eigenschaften werden automatisch besiedelt, wenn sie exec () oder test () Methoden aufrufen.
[Anmerkung] Theoretisch ist der Regexp. $ 0, der auf den gesamten Ausdruckspiegel -Text gespeichert werden sollte, nicht vorhanden, der Wert ist undefiniert
//Regexp.$1/regexp.$2/regexp.$3… TO REGEXP. console.log (regexp. $ 2); // t}
Beispielmethode
Es gibt 5 Instanzmethoden von Regexp -Objekten, die in zwei Kategorien unterteilt sind. Einschließlich drei allgemeine Objektmethoden: toString (), tolocalstring (), valueof () und reguläre Matching -Methoden von Test () und exec ()
EINZELTEMALTE METHODE
Das Regexp -Objekt erbt drei Methoden: toString (), tolocalestring () und valueOf () des Objektobjekts.
【ToString ()】
Die Methode toString () gibt das wörtliche des regulären Ausdrucks zurück
【Tolocalestring ()】
Die Methode Tolocalestring () gibt das Literal des regulären Ausdrucks zurück
【Valueof ()】
Die ValueOf () -Methode gibt das reguläre Expressionsobjekt selbst zurück
[Hinweis] Unabhängig von dem regulären Ausdruck gibt diese drei Methoden nur ihre wörtliche Form zurück
var muster = new regexp ('[bc] at', 'gi'); console.log (muster.toString ()); // '/[bc] at/gi'console.log (muster.tolocalestring ()); // '/[bc] at/gi'console.log (muster.Valueof ()); ///[bc] at/givar muster =/[bc] at/gi; console.log (muster.toString ()); // '/[bc] at/gi'console.log (muster.tolocalestring ()); // '[bc] at/gi'console.log (muster.Valueof ()); ///[bc] at/giRegelmäßige Matching -Methode
Es gibt nur zwei reguläre Matching -Methoden für Regexp -Objekte: exec () bzw. test ().
【Exec ()】
Die Exec () -Methode wurde speziell zum Aufnehmen von Gruppen entwickelt und akzeptiert einen Parameter, nämlich die Zeichenfolge, auf die das Muster angewendet werden soll. Geben Sie dann ein Array mit Übereinstimmungsinformationen zurück und geben Sie NULL zurück, wenn es keine Übereinstimmung gibt.
Im Match -Array handelt es sich bei dem ersten Element um eine Zeichenfolge, die dem gesamten Muster entspricht, und die anderen Elemente sind eine Zeichenfolge, die mit der Erfassungsgruppe im Muster übereinstimmt. Wenn im Muster keine Erfassungsgruppe vorhanden ist, enthält das Array nur eine
Das zurückgegebene Array enthält zwei zusätzliche Eigenschaften: Index und Eingabe. Index bedeutet, dass sich die Übereinstimmung an der Position der Zeichenfolge befindet. Die Eingabe bedeutet die Zeichenfolge, in der der reguläre Ausdruck angewendet wird
var text = 'mom and dad and baby and others';var pattern = /mom( and dad( and baby)?)?/gi;var matches = pattern.exec(text);console.log(pattern,matches);//pattern.lastIndex:20//matches[0]:'mom and dad and baby'//matches[1]:' and dad and baby'//matches[2]:' and baby '// Matches.index: 0 // Matches.input:' Mama und Papa und Baby und andere '
Für die Exec () -Methode wird auch wenn das globale Flag (G) im Muster eingestellt ist, nur dann eine Übereinstimmung nach dem anderen. Ohne das globale Flag einzustellen, wird exec () mehrmals in derselben Zeichenfolge aufgerufen, die die Informationen der ersten Übereinstimmung immer zurückgeben. Bei der Festlegung des globalen Flags suchen jeder Anruf an exec () weiterhin nach einer neuen Übereinstimmung in der Zeichenfolge.
var text = 'cat,bat,sat,fat';var pattern1 = /.at/;var matches = pattern1.exec(text);console.log(pattern1,matches);//pattern1.lastIndex:0//matches[0]:'cat'//matches.index:0//matches.input:'cat,bat,sat,fat'var text = 'cat,bat,sat,fat';matches = muster1.exec (Text); console.log (muster1, Matches); //pattern1.lastindex:0//matches?0:'Cat'//matches.index:0//matches.input:'cat,bat,sat,fat '
var text = 'cat, bat, sat, fett'; var muster2 = /.at/g;var Matches = muster2.exec (text); console.log (muster2, übereinstimmt); //Pattern2.lastindex:3//matches?0:'Cat'//Matches.index:0//matches.input:'cat,bat,sat,fat'var text = 'cat, bat, sat, fat'; //pattern22.lastindex:7//matches Appan
【Tipps】 Verwenden Sie die methode exec (), um alle übereinstimmenden Positionen und alle Werte zu finden
var string = 'j1h342jg24g234j 3g24j1'; var muster = // d/g; var Valuearray = []; // valu indexarray = []; // Position var temp; while (temp = muster.exec (String))! IndexArray.push (temp.Index); } // ["1", "3", "4", "2", "2", "4", "2", "3", "4", "3", "2", "4", "1".
【prüfen()】
Mit der Methode test () wird testen
var text = '000-00-000'; var muster = // d {3}-/d {2}-/d {4}/; if (muster.test (text)) {console.log ('Das Muster wurde übereinstimmt');};};};};In ähnlicher Weise wird die LastIndex -Eigenschaft des Regexp -Objekts, wenn die Test () -Methode aufgerufen wird, geändert. Wenn ein globales Muster angegeben wird, wird jedes Mal, wenn die Test () -Methode ausgeführt wird, der letzteIndex -Offset -Wert in der Zeichenfolge. Daher werden verschiedene Zeichenfolgen mehrmals mit demselben Regexp verifiziert. Der letzteIndex -Wert muss nach jedem Anruf auf 0 gesetzt werden.
var muster = /^/derd <consoles.log(Pattern.Test('2016-06-23')));//trueconsole /^/des4}-/d <2}-/des <2}$/g;console.log(Pattern.test('2016-06-23'))//Truepattern.lastindex = 0; console.log (Muster.Test ('2016-06-23'); // truep; 0; console.log (muster.test ('2016-06-23')); // Truepastern.lastindex = 0; console.log (muster.test ('2016-06-23'); // trueWie bereits erwähnt, verfügt JavaScript über 9 Konstruktoreigenschaften zum Speichern von Erfassungsgruppen. Diese Eigenschaften werden automatisch gefüllt, wenn Sie die Methode exec () oder test () aufrufen.
[Anmerkung] Theoretisch ist der Regexp. $ 0, der auf den gesamten Ausdruckspiegel -Text gespeichert werden sollte, nicht vorhanden, der Wert ist undefiniert
if (/^(/d {4})-(/d {2})-(/d {2}) $/. test ('2016-06-23') {console.log (regexp. $ 1); // '2016' console.log (regexp. console.log (regexp. $ 0); // undefined}Das obige ist der JavaScript -Typ System_Regex Regexp -Typ detaillierte Erläuterung der Details. Ich hoffe, jeder unterstützt Wulin.com ~