Reguläre Ausdrücke und Sonderzeichen

Reguläre Ausdrücke in Javascript haben eine spezielle Kurzform und Standard PCRE-Syntax.

Sie arbeiten durch ein spezielles Objekt RegExp.

Darüber hinaus haben die Linien ihre eigenen Methoden der Suche, Match, zu ersetzen, sondern um sie zu verstehen - die gleiche erste RegExp analysieren.

Das RegExp - Objekt - Typ, oder, kurz gesagt, reguläre Ausdrücke, können Sie eine Zwei-Wege schaffen

/ Muster / Fahnen
neue RegExp ( "Muster" [, flags])

Muster -, und die Fahnen - eine Zeichenfolge aus einer beliebigen Kombination von Symbolen g (globale Suche), i (Groß- und Kleinschreibung) und m (mehrzeilige Suche) - der reguläre Ausdruck für (später Ersatz) zu suchen.

Das erste Verfahren wird häufig verwendet, die zweite - manchmal. Zum Beispiel sind diese beiden Anrufe äquivalent:

var reg = / ab + c / i
var reg = new RegExp ( "ab + c", "i")

Auf dem zweiten Anruf - tk regulären Ausdruck in Anführungszeichen, ist es notwendig , die zu duplizieren \

// gleichwertig
re = new RegExp ( "\\ w +")
re = / \ w + /

Bei der Suche können Sie die meisten Funktionen der modernen PCRE-Syntax.

Hide / Show Tisch

Symbol Bedeutung
\ Für gewöhnliche Zeichen - sie besonders macht. Zum Beispiel kann der Ausdruck / s / sucht nach einem Symbol für 's'. Und wenn Sie ein \ vor s setzen, dann / \ s / schon steht für Leerzeichen simvol.I Umgekehrt, wenn ein Sonderzeichen, wie *, es \ es machen wird nur das übliche Symbol "Stern". Zum Beispiel / a * / sucht nach 0 oder mehr aufeinanderfolgende Zeichen 'a'. Um einen Stern mit 'a *' gefunden - legte ein \ vor dem Sonder. Symbol: / a \ * /.
^ Es zeigt den Beginn der Eingangsdaten. Wenn die mehrzeilige Flag - Suche ( "m"), es funktioniert auch am Anfang eines neuen stroki.Naprimer, / ^ A / nicht findet "A" in "ein A", aber fand die erste "A" in "An A."
$ Es gibt das Ende der Eingabe. Wenn die Multi Suchflag auch am Ende des stroki.Naprimer ausgelöst wird, $ / t / nicht findet "t" in "Esser", findet aber - in "essen".
* Gibt wiederholen 0 oder mehrmals. Zum Beispiel / bo * / wird 'boooo "in" Ein Geist booooed "und" b "in" Ein Vogel zwitscherte ", aber das finden nicht" Eine Ziege grunzte ".
+ Weist auf eine Wiederholung 1 oder mehrere Male. Entspricht {1}. Zum Beispiel / a + / find 'a' in "Candy" und alle "a" in "caaaaaaandy".
? Es zeigt an, dass das Element vorhanden oder nicht vorhanden sein kann. Zum Beispiel / e? Le? / Suchen 'el' in "Engel" und das "le" in "Winkel" . Wenn unmittelbar nach einem der quantifiers verwendet *, + ,? , Oder {}, definiert sie "genügsam" Suche (Wiederholung minimal mögliche Anzahl von Malen zum nächsten Muster nächste Element), wie auf die "gierigen" Modus standardmäßig gegenüber , in denen die Anzahl der Wiederholungen wie möglich, auch wenn das nächste Element des Musters zu podhodit.Krome ,? wird in der Vorschau verwendet , die in der folgenden Tabelle (=?) und (?) (?) beschrieben.
. (Dezimalpunkt) steht für ein beliebiges Zeichen außer Newline: \ n \ r \ u2028 oder \ u2029. (Sie können [\ s \ S] für ein beliebiges Zeichen zu suchen, einschließlich Zeilenumbrüche). Zum Beispiel /.n/ finden 'ein' und 'auf' in "ja, ein Apfel auf dem ist Baum", aber nicht "nein".
(X) Finden Sie die x und speichert. Dies wird als "Speicher Klammern" genannt. Zum Beispiel / (foo) / zu finden und erinnert sich 'foo' in "foo bar." Das angepasste String wird in dem Array, Suchergebnis oder auf einen vordefinierten RegExp Objekteigenschaften gespeichert: $ 1, ..., 9 $ .In Zusätzlich werden die Klammern verbunden sind, dass sie enthalten, in einem einzigen Element des Musters. Beispielsweise (abc) * - abc Wiederholung von 0 oder mehr.
(?: X) Funde von x, aber erinnert sich nicht an die gefunden. Dies ist bekannt als "unmemorable Klammern." Das angepasste String wird in den Array-Ergebnisse und Eigenschaften nicht gespeichert RegExp.Kak und alle Klammern, um sie in einem einzigen podpattern vereinigen sich.
x (? = y) Finds x, wenn auch nur für x y impliziert. Zum Beispiel, / Jack (? = Sprotte) / finden 'Jack', nur , wenn sie von "Sprotte" folgt. / Jack (= Sprotte |? Frost ) / finden 'Jack', wenn auch nur durch "Sprotte" oder "Frost" zu folgen. Doch weder "Sprotte" noch "Frost" wird nicht in den Suchergebnissen enthalten sein.
x (?! y) Finds x, wenn auch nur für x sollte nicht y. Zum Beispiel /\d+(?!\.)/ die Zahl finden nur dann , wenn nicht von einem Komma gefolgt gefolgt. /\d+(?!\.)/.exec("3.141 ") 141, aber nicht 3.141.
x | y Finden Sie die x oder y. Zum Beispiel / grün | ". Red apple" rot / finden "grün" in der "grünen Apfel" und "rot" in der
{N} Wo n - positive ganze Zahl ist. Findet genau n Wiederholungen des vorhergehenden Punkt. Zum Beispiel / a {2} / findet 'a' in "Candy" , sondern wird in den beiden ein "caandy" , und die ersten beiden in einem "caaandy."
{N,} Wo n - positive ganze Zahl ist. Findet n oder mehr Wiederholungen des Elements. Zum Beispiel / a {2} nicht findet "a" in "Candy", findet aber alle "a" in "caandy" und "caaaaaaandy."
{N, m} Wobei n und m - positive ganze Zahlen. Finden n zu m Wiederholungen des Elements.
[Xyz] Zeichensatz. Es findet alle Zeichen. Sie können den Zeitraum der Verwendung von Bindestrichen angeben. Zum Beispiel : [abcd] - das gleiche wie [ad]. Dies wird die "b" in "brisket", und die "a" und "c" in "Schmerz" zu finden.
[^ Xyz] Jedes Zeichen, mit Ausnahme der in dem Satz. Sie können auch das Intervall angeben. Zum Beispiel : [^ abc] - das gleiche wie [^ ac]. Dadurch wird das "r" in "brisket" und die "h" find "hacken".
[\ B] Findet Charakter Backspace. (Nicht mit \ b verwechselt.)
\ b Findet Wörter Grenze (Latein), wie ein Raum. (Nicht zu verwechseln mit [\ b]). Zum Beispiel, / \ bn \ w / finden "Nein" in "noonday"; / \ Wy \ b / wird "ly" in "möglicherweise gestern."
\ B Es gibt kein Wort zu begrenzen. Zum Beispiel, / \ w \ Bn / findet "on" in "noonday" und / y \ B \ w / finden "ihr" in "möglicherweise gestern."
\ C X Wo X - Buchstaben von A bis Z. Gibt ein Steuerzeichen in einer Zeichenfolge. Zum Beispiel, / \ cM / bezeichnet das Zeichen Ctrl-M.
\ d findet eine beliebige Anzahl von Zeichen (wir denselben Unicode haben). Isplzuetsya [0-9], um nur die üblichen Zahlen finden. Zum Beispiel, / \ d / oder / [0-9] / find '2' in "B2 ist die Suite Nummer."
\ D Finden Sie nicht numerisches Zeichen (Buchstaben). [^ 0-9] - das entspricht gewöhnlichen Zahlen. Zum Beispiel, / \ D / oder / [^ 0-9] / find 'B' in "B2 ist die Suite Nummer."
\ F, \ r \ n Entsprechende Sonderzeichen Seitenvorschub, Zeilenvorschub, Zeilenvorschub.
\ s Dadurch werden alle weißen Raum, einschließlich Leerzeichen, Tabulatoren, Zeilenumbrüche und andere Unicode-Leerzeichen finden. Zum Beispiel, / \ s \ w * / find 'bar' in "foo bar."
\ S Dies wird jedes Zeichen außer Leerzeichen finden. Zum Beispiel, / \ S \ w * / wird 'foo' in "foo bar."
\ t Die Tab-Zeichen.
\ v Vertical Tab-Zeichen.
\ w Dadurch werden alle verbal (lateinische Schrift) Zeichen, einschließlich Buchstaben, Zahlen und Unterstrichen finden. Entspricht [A-Za-z0-9_]. Zum Beispiel, / \ w / finden "a" in der "Apfel" , "5" in "$ 5,28" und "3" in der "3D" .
\ W Dies wird jede nicht- (lat.) Finden eine verbale Symbol. Entspricht [^ A-Za-z0-9_] . Zum Beispiel, / \ W / und / [^ $ A-Za z0-9 _] / gleichermaßen finden "%" in "50%."
\ n worin n - eine ganze Zahl. Link zurück zu den n-ten gespeicherten Teilzeichenfolge Klammern. Zum Beispiel / Apfel (,) \ sorange \ 1 / wird "Apfel, Orange," in "Apfel, Orange, Kirsche, Pfirsich .". Über dem Tisch gibt es ein vollständigeres Beispiel.
\ 0 Wird ein NUL-Zeichen finden. Sie nicht bis zum Ende der anderen Figuren hinzuzufügen.
\ X hh Wird das Zeichen mit dem Code hh finden (zwei hexadezimale Ziffern)
\ U hhhh Wird das Zeichen mit dem Code hhhh finden (vier hexadezimalen Ziffern).

Um einfach prüfen , ob die Zeichenfolge , die den regulären Ausdruck übereinstimmt, die Methode der Test unter Verwendung von :

if (/\s/.test("stroka ")) {
... In der Zeile gibt es Lücken! ...
}

Exec Methode gibt ein Array und legt die Eigenschaften eines regulären Ausdrucks.
Wenn es keine Übereinstimmung gibt, gibt es null.

Zum Beispiel

// Finden one-d, gefolgt von einem oder mehr als b, die zu d ist
// Denken Sie daran , Punkt b, und nach ihnen d
// Unempfindlich Suche
var MYRE = / d (b + ) (d) / ig;
var myArray = myRe.exec ( "cdbBdbsbz" );

Als Ergebnis der Ausführung des Skripts werden die folgenden Ergebnisse sein:

Objekt Immobilien / Index Beschreibung Beispiel
myArray Der Inhalt von arr. [ "DbBd", "BB" , "d"]
Index Indexanpassung (0) 1
Eingang Die ursprüngliche Zeichenfolge. cdbBdbsbz
[0] Die letzten abgestimmt Zeichen dbBd
[1], ... [n] Spiele in verschachtelten Klammern, falls vorhanden. Die Anzahl der verschachtelten Klammern sind nicht beschränkt. [1] = bB
[2] = d
MYRE last Der Index, um die nächste Suche beginnen soll. 5
ignoreCase Zeigt an, dass war im Preis enthalten Groß- und Kleinschreibung Suche, "i" Flagge. wahr
global Zeigt an, dass war im Preis inbegriffen Flag "g" alle Spiele finden. wahr
mehrzeilige Displays, war ein Multi-Suchflag ist aktiviert , wenn "m". falsch
Quelle Der Text des Musters. d (b +) (d)

Wenn das Flag "g" in einem regulären Ausdruck enthalten ist, können Sie die exec - Methode oft aufrufen , um Spiele in Folge in der gleichen Linie zu finden. Wenn Sie dies tun, beginnt die Suche an der String von str, mit dem Index last. Zum Beispiel, hier ist ein Skript wie folgt aus:

var MYRE = / ab * / g ;
var str = "abbcdefabh";
while ((arr = myRe.exec (str ))! = null) {
var msg = "Gefunden" + arr [ 0] + ".";
msg + = "Nächstes Spiel beginnt bei " + myRe.lastIndex;
print (msg);
}

Dieses Skript zeigt den folgenden Text:

Gefunden abb. Nächstes Spiel beginnt bei 3
Gefunden ab. Nächstes Spiel beginnt bei 9

In dem folgenden Beispiel durchsucht die Funktion für die Eingabe. Dann do-Schleife durch das Array, um zu sehen, ob es andere Namen sind.

Es wird angenommen, dass alle registrierten Namen im Array A sind:

var A = [ "Frank", "Emily", "Jane", "Harry", "Nick", "Beth", "Rick",
"Terrence", "Carol", "Ann", "Terry", "Frank", "Alice", "Rick",
"Bill", "Tom", "Fiona", "Jane", "William", "Joan", "Beth"];

Funktion Lookup (Eingang)
{
var firstname = /\w+/i.exec(input);
if (! vorName)
{
print (Eingang + "ist kein Name!");
Rückkehr;
}

var count = 0;
for (var i = 0; i <a.length; i ++)
{
if (vorName [0] .tolowercase () == A [i ] .tolowercase ())
zählen ++;
}
var midstring = (count == 1)? "Andere hat": "andere haben ";
print ( "Danke" + count + midstring + "den gleichen Namen!")
}

Die folgenden Methoden zur Arbeit mit regulären Ausdrücken von Strings arbeiten.

Alle Methoden, mit Ausnahme ersetzen, können Sie als Objekte vom Typ regexp in den Argumenten aufrufen und mit Strings, die in Maschinen RegExp-Objekte umgewandelt werden.

Es ist also äquivalent zu nennen:

var i = str.search (/ \ s /) var i = str.search ( "\\ s")

Wenn Sie Anführungszeichen verwenden, um doppelte \ und Sie können die Flags nicht angeben, so ist es manchmal praktisch und vollständiger Form

var i = str.search (new RegExp ( "\\ s", "g"))

Es gibt den Index des regulären Ausdrucks in der Zeichenfolge oder -1.

Wenn Sie wissen wollen , ob der String dem regulären Ausdruck entspricht, verwenden Sie die Methode suchen (ähnlich RegExp-Methoden zu testen). Für weitere Informationen verwenden , um die langsamere Methode Match (die gleiche Methode der RegExp exec).

Dieses Beispiel gibt die Meldung, je nachdem, ob der String dem regulären Ausdruck entspricht.

Funktion testinput (re, str) {
if (str.search (re)! = -1)
midstring = "enthält";
sonst
midstring = "enthält nicht";
document.write (str + midstring + re.source) ;
}

Wenn regexp nicht die g - Flag ist, gibt das gleiche Ergebnis , dass regexp.exec (string).

Wenn die regexp das g - Flag hat, gibt es ein Array mit allen Zufällen.

Um einfach herausfinden , ob der String dem regulären Ausdruck entspricht der regexp, verwenden regexp.test (string).

Wenn Sie das erste Ergebnis erhalten möchten - versuchen r egexp.exec (string).

Im folgenden Beispiel wird verwendet , um das Spiel "Kapitel" zu finden, gefolgt von einer oder mehreren Ziffern, dann sind die durch einen Punkt getrennt Zahlen. Im regulären Ausdruck ist das Flag i, so dass das Register werden ignoriert.

str = "Weitere Informationen finden Sie in Kapitel 3.4.5.1";
re = / Kapitel (\ d. + (\ \ d) *) / i;
gefunden = str.match (re);
alert (gefunden);

Das Skript wird das Array der Spiele geben:

  • Kapitel 3.4.5.1 - vollständig passende Zeile
  • 3.4.5.1 - die erste Klammer
  • 0,1 - Interne Halterung

Das folgende Beispiel zeigt die Verwendung von Fahnen und unempfindlich globale Suchspiel. in einem separaten Element des Arrays - Alle Briefe werden von A bis E und A bis E, die jeweils zu finden.

var str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
var regexp = / [AE] / gi;
var entspricht = str.match (Wildcards);
document.write (Ursachen);
// Spiele = [ 'A', 'B', 'C', 'D', 'E', 'a', 'b', 'c', 'd', 'e']

Ersetzen Verfahren das Auftreten eines regulären Ausdrucks ersetzen, nicht nur auf der Linie, sondern auch auf das Ergebnis der Funktion. Die vollständige Syntax - ist dies:

var = Neuerstring str.replace (regexp / substr , newSubStr / Funktion)
regexp
Das Objekt RegExp. Sein Eintrag wird durch einen Wert ersetzt werden, der die Parameternummer 2 wird wieder
substr
Eine Zeichenfolge , die durch newSubStr ersetzt werden.
newSubStr
String, der den Teilstring aus einem Argument Nummer 1 ersetzt.
Funktion
Eine Funktion, die eine neue Teilkette aufgerufen werden kann, um zu generieren (es zu ersetzen, anstatt einer Teil aus einem Argument 1) erhalten.

Ersetzen Methode nicht die Zeichenfolge ändern, die aufgerufen wird, sondern gibt einfach eine neue, geänderte Zeichenfolge.

Um eine globale Substitution machen, umfassen "g" in den regulären Ausdruck Flagge.

Wenn das erste Argument - String, wird es nicht zu einem regulären Ausdruck umgewandelt, so dass zum Beispiel,

var ab = "ab" .replace ( "\\ s", "..") // = "ab"

Der Aufruf ersetzen Zeichenfolge unverändert gelassen, weil es nicht für einen regulären Ausdruck \ s suchen, und die Zeichenfolge "\ s".

Der Ersatz-String können einige Sonderzeichen sein:

Muster Einsätze
$$ Fügt ein "$".
$ & Fügt einen Teilstring gefunden.
$ ` Legen Sie ein Stück Schnur, die den angepassten Eintrag vorausgeht.
$ ' Inserts der Linie, die nach dem Auftreten gefunden wird.
$ N oder $ nn Wenn n oder nn - Dezimalstellen, fügt die String vorkommt n gespeicherten verschachtelten Klammern th, wenn das erste Argument - das Objekt RegExp.

Wenn Sie einen zweiten Parameter an die Funktion angeben, dann hält es für jedes Spiel.

In-Funktion können Sie dynamisch zu generieren und eine Ersatzzeichenfolge zurück.

Der erste Parameter der Funktion - einstimmenden Zeichenkette. Wenn das erste Argument zu ersetzen , ein RegExp - Objekt ist, enthalten die nächsten n Parameter die Anpassung von verschachtelten Klammern. Die letzten beiden Parameter - die Position in der Zeile, wo das Spiel stattgefunden und die Zeichenfolge selbst.

Zum Beispiel, kehrt das folgende Aufruf XXzzzz ersetzen - XX, zzzz.

Funktion replacer (str, p1, p2 , Offset-, s)
{
Rückkehr str + "-" + p1 + "," + p2;
}
var Neuerstring = "XXzzzz" .replace ( / (X *) (z *) /, replacer)

Wie Sie sehen können, gibt es zwei Klammern im regulären Ausdruck, und daher zwei Parameter P1, P2 - Funktion.
Wenn es drei Klammern, würde die Funktion haben , um den Parameter p3 hinzuzufügen.

Die folgende Funktion ersetzt die Wörter auf der border-top borderTop eingeben:

Funktion styleHyphenFormat (property)
{
Funktion upperToHyphenLower (Match)
{
return '-' + match.toLowerCase () ;
}
Rückkehr propertyName.replace (/ [AZ] / , upperToHyphenLower);
}

Für ein allgemeines Verständnis von regulären Ausdrücken, können Sie den Check - out Artikel in der Wikipedia .

Weitere Details sind in dem Buch (Eng.) Beschrieben Anfang, Reguläre Ausdrücke .