This page has been robot translated, sorry for typos if any. Original content here.

Reguläre Ausdrücke und Sonderzeichen

Regulärer Ausdruck in JavaScript hat 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, ersetzen, sondern sie zu verstehen - die gleiche erste RegExp analysieren.

Der RegExp - Objekt - Typ, oder, kurz gesagt, ein regulärer Ausdruck kann auf zwei Arten erstellt werden

/ Muster / Fahnen
neuer RegExp ( "Muster" [, Flags])

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

Das erste Verfahren wird häufig verwendet, die zweite - manchmal. Zum Beispiel sind zwei solche 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 duplizieren \

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

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

Hide / Show Tisch

Symbol Wert
\ Für gewöhnliche Zeichen - sie besonders macht. Zum Beispiel kann der Ausdruck / s / sucht nur das Zeichen ‚s‘. Und wenn Sie ein \ vor s setzen, dann / \ s / schon steht für Leerzeichen simvol.I Umgekehrt, wenn ein spezielles Symbol, 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 - legt eine \ vor dem Sonder. Symbol: / a \ * /.
^ Es markiert den Beginn der Eingangsdaten. Wenn Sie einen Multi-Suche - Flag ( "m") installiert ist , funktioniert es auch am Anfang eines neuen stroki.Naprimer, / ^ A / nicht findet 'A' in "ein A", aber fand die ersten 'A' in "An A."
$ Es gibt das Ende der Eingabe. Wenn Sie ein Multi-Suchflag installiert 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 trällerte“, aber das fand nicht „Eine Ziege grunzte“.
+ Zeigt eine Wiederholung 1 oder mehrmals. 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? / Suche 'el' in "Engel" und die 'le' in "Winkel" . Wenn unmittelbar nach einem des quantifiers verwendet *, + ,? Oder {} setzt dann das „non-Greedy“ -Suche (Repetition minimal mögliche Anzahl von Malen zum nächsten Element nächste Muster), im Gegensatz zu den „gierigen“ Standardmodus , in dem die maximale Anzahl von Wiederholungen, auch wenn das nächste Musterelement derselben podhodit.Krome ,? in dieser Vorschau verwendet, die in der Tabelle unten (=?) beschrieben wird , und (?) (?).
. (Dezimalpunkt) ist irgendein anderes Zeichen als das Zeilenvorschub: \ n \ r \ u2028 oder \ u2029. (Sie können [\ s \ S] für alle Suchzeichenfolgen mit Übersetzung). Zum Beispiel /.n/ finden ‚ein‘ und ‚auf‘ in „ja, ein Apfel ist auf dem Baum“, aber nicht das ‚ja‘.
(X) X findet und speichert. Dies wird als „Speicher Klammern“ genannt. Zum Beispiel / (foo) / finden und 'foo' in auswendig lernen "foo bar." Die angepaßte Teilzeichenfolge wird in dem Array, Suchergebnis oder auf ein vordefinierten RegExp Eigenschaften des Objekts gespeichert ist: $ 1, ..., 9 $ .Darüber hinaus die Konsolen gemeinsam haben , ist , dass sie in einem einzigen Elemente des Musters. Zum Beispiel (abc) * - abc Wiederholung von 0 oder mehr.
(?: X) Funden von x, aber erinnert sich nicht an die gefunden. Dies wird als „nicht bemerkenswert Klammern“ genannt. Das angepaßte Teilzeichenfolge wird in den Array-Ergebnisse und Eigenschaften nicht gespeichert RegExp.Kak und alle Klammern, sie zu einem einzigen podpattern vereinigen sich.
x (? = y) Finds x, wenn auch nur für x y impliziert. Zum Beispiel / Jack (? = Sprotte) / finden 'Jack', wenn sie nicht von 'Sprotte' folgt. / Jack (= Sprotte |? Frost ) / finden 'Jack', wenn auch nur durch 'Sprotte' oder 'Frost' 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 findet nur , wenn nicht von einem Komma gefolgt gefolgt. /\d+(?!\.)/.exec("3.141 „) findet 141, aber nicht 3.141.
x | y Findet die x oder y. Zum Beispiel / grün | "red apple" rot / finden 'grün' in dem "grünen Apfel" und 'rot' in dem
{N} Wo n - eine positive ganze Zahl. Findet genau n Wiederholungen des vorhergehenden Elements. Zum Beispiel / a {2} / findet 'a' in "Candy" , sondern wird sowohl in einem "caandy" , und die ersten beiden in einem "caaandy."
{N,} Wo n - eine positive ganze Zahl. N und findet mehr Wiederholungen Element. Zum Beispiel / a {2} nicht finden 'a' in einer "Süßigkeit", würde aber all 'a' in "caandy" und findet "caaaaaaandy."
{N, m} Wobei n und m - positive ganze Zahlen. Das Finden von n bis m Element Wiederholungen.
[Xyz] Zeichensatz. Findet eines dieser Zeichen. Sie können die Länge der Verwendung von Bindestrichen angeben. Zum Beispiel : [abcd] - das gleiche wie [ad]. Funde ‚b‘ in „Bruststück“ und ‚a‘ und ‚c‘ in „Schmerz“.
[^ Xyz] Jedes andere Zeichen als diejenigen, die in dem Satz angegeben. Sie können auch das Intervall angeben. Zum Beispiel : [^ abc] - das gleiche wie [^ ac]. Finden Sie ein 'r' in "brisket" und 'h' in "hacken".
[\ B] Findet ein Zeichen Backspace. (Nicht mit \ b verwechseln.)
\ 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 Bedeutet kein Wort zu begrenzen. Zum Beispiel, / \ w \ Bn / finden 'auf' in "noonday", a / y \ B \ w / finden 'sie' in "möglicherweise gestern."
\ C X Wo X - der Buchstabe A bis Z. Gibt ein Steuerzeichen in einer Zeichenfolge. Zum Beispiel kann / \ cM / bezeichnet das Symbol Ctrl-M.
\ d findet eine beliebige Anzahl von Zeichen (wir die gleiche Unicode haben). Zu [0-9], um nur die üblichen Zahlen zu finden. Zum Beispiel, / \ d / und / oder [0-9] / finden '2' in "B2 ist die Suite Nummer."
\ D Finden sie ein nicht-numerischen Zeichen (Buchstaben). [^ 0-9] - äquivalent zu gewöhnlichen Zahlen. Zum Beispiel kann / \ D / oder / [^ 0-9] / wird 'B' in "B2 ist die Suite Nummer."
\ F \ r \ n Entsprechende Sonderzeichen Form-feed, Zeilenvorschub, Zeilenvorschub.
\ s Angebote: Alle Leerzeichen, einschließlich Leerzeichen, Tabulatoren, Zeilenumbrüche und andere Unicode-Leerzeichen. Zum Beispiel, / \ s \ w * / finden 'Bar' in "foo bar."
\ S Findet alle Zeichen außer Leerzeichen. Zum Beispiel, / \ S \ w * / wird 'foo' in "foo bar."
\ t Die Tab-Zeichen.
\ v Glyph vertikale Registerkarte.
\ w Finden keine verbale (lateinische Alphabet) Zeichen, einschließlich Buchstaben, Zahlen und Unterstrichen. Gleichwertig [A-Za-z0-9_]. Zum Beispiel, / \ w / finden 'a' in "ein Apfel" , '5' in den "$ 5.28" und "3" in "3D" .
\ W Sie sucht ein nicht- (lat.) Verbal-Symbol. Gleichwertig [^ A-Za-z0-9_] . Zum Beispiel, / \ W / und / [^ $ A-Za z0-9 _] / gleichermaßen finden '%' in "50%."
\ n worin n - eine ganze Zahl ist . Link zurück zu den n-ten gespeicherten Teilzeichenfolge Klammern. Zum Beispiel / Apfel (,) \ sorange \ 1 / finden 'Apfel, Orange,' einen "Apfel, Orange, Kirsche, Pfirsich .". Über den Tisch gibt es ein vollständigeres Beispiel.
\ 0 Suchen Sie ein NUL-Zeichen. Nicht bis zum Ende der anderen Figuren hinzuzufügen.
\ X hh Finden Sie das Zeichen mit dem Code - hh (zwei hexadezimale Ziffern)
\ U hhhh Finden Sie die Zeichen mit dem Code hhhh (vier hexadezimale Ziffern).

Nur um zu prüfen , ob die Zeichenfolge , die den regulären Ausdruck übereinstimmt, die Methode Test:

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

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

Zum Beispiel,

Finden // ein d, gefolgt von 1 oder mehr von B, gefolgt von einer d
// Denken Sie daran , Punkt b, und nach ihnen d
// unempfindliche 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 Property / Index Beschreibung Beispiel
myArray Der Inhalt von arr. [ "DbBd", "bB" , "d"]
Index Koinzidenz-Index (0) 1
Eingang Die ursprüngliche Zeichenfolge. cdbBdbsbz
[0] Die letzten abgestimmt Zeichen dbBd
[1], ... [n] Spiele in verschachtelten Klammern, falls vorhanden. Verschachtelte Klammern sind nicht darauf beschränkt. [1] = bB
[2] = d
MYRE last Der Index, an dem 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 Shows, 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 aufeinanderfolgende Spiele in der gleichen Linie zu finden. Wenn Sie dies tun, beginnt die Suche an dem String von str, mit dem Index liest. Zum Beispiel, wie dieses Skript:

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

Im folgende Beispiel, sucht die Funktion für die Eingabe. Dann wird eine 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 vorName = /\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 (firstname [0] .tolowercase () == A [i ] .tolowercase ())
zählen ++;
}
var midstring = (count == 1)? „Andere haben“: „andere haben “;
print ( "Danke" + count + midstring + "den gleichen Namen!")
}

Die folgenden Methoden arbeiten mit Reihen von regulären Ausdrücken.

Alle Methoden außer ersetzen, können beide Arten regexp mit Objekten in den Argumenten induzieren und Strings, die Maschine RegExp-Objekte umgewandelt werden.

So dass Anrufe sind äquivalent:

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

Wenn Sie Anführungszeichen verwenden, um doppelten \ und Sie können die Flags nicht angeben, so ist es manchmal praktisch und vollständige 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 testen). Für weitere Informationen verwenden , um die langsamere Methode match (ähnlich dem Verfahren von RegExp exec).

Dieses Beispiel zeigt eine Meldung an, 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 der g - Flag ist, kehrt das gleiche Ergebnis wie das regexp.exec (string).

Wenn regexp den g - Flag hat, gibt einen Array von allen Koinzidenzen.

Nur um zu sehen , wenn die Zeichenfolge den regulären Ausdruck der regexp passen, verwendet regexp.test (string).

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

Im folgenden Beispiel wird das Spiel das „Kapitel“ zu finden, gefolgt von einer oder mehreren Ziffern und dann die durch einen Punkt getrennt Zahlen. Ein regulärer Ausdruck ist ein 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 gibt eine Reihe von Begegnungen:

  • Kapitel 3.4.5.1 - voll Anpassleitung
  • 3.4.5.1 - die erste Klammer
  • 0,1 - innere Klammer

Das folgende Beispiel zeigt die Verwendung von Fahnen und unempfindlich globalen Suchspiel. in einem separaten Element des Arrays - alle Briefe werden von A bis E und A bis E, die jeweils ermittelt werden.

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

Verfahren ersetzen können Instanzen des regulären Ausdrucks ersetzen ist nicht nur eine Zeichenfolge, sondern das Ergebnis der Funktion. Seine vollständige Syntax - ist dies:

var Neuerstring = str.replace (regexp / substr , newSubStr / Funktion)
regexp
Objekt RegExp. Sein Eintrag wird durch einen Wert ersetzt werden, der die Parameternummer 2 zurückkehren
substr
Eine Zeichenfolge, die durch newSubStr ersetzt werden.
newSubStr
String, der die Teilkette aus dem Argument Nummer 1 ersetzt.
Funktion
Eine Funktion, die aufgerufen werden kann, eine neue Teilkette zu erzeugen (zu ersetzen, es stattdessen resultierende Strings von Argumente 1).

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

einen globalen Austausch, drehen Sie die „g“ in der regulären Ausdruck Flagge zu implementieren.

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

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

Aufruf ersetzen Zeichenfolge unverändert gelassen, denn nicht für einen regulären Ausdruck \ s sah, und die Zeichenfolge „\ s“.

Entsprechend können Substitutionen solche Sonderzeichen sein:

Muster Einsätze
$$ Fügt ein „$“.
$ & Fügt einen Teilstring gefunden.
$ ` Einsätze der Linie, die den gefundenen Eintrag vorausgeht.
$ ' Fügt einen Teil einer Zeichenfolge, die nach dem gefundenen Eintrag geht.
$ N oder $ nn Wo n oder nn - Dezimalstellen, fügt die Teilzeichen Vorkommen, n-ten gespeicherten verschachtelten Klammern, wenn das erste Argument - das Objekt RegExp.

Wenn Sie einen zweiten Parameter an die Funktion angeben, wird es bei jedem Spiel ausgeführt.

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

Der erste Parameter der Funktion - das angepaßte String. Wenn das erste Argument ersetzen Objekt RegExp ist, umfassen die folgenden Parameter n Koinzidenz von verschachtelten Klammern. Die letzten zwei Parameter - die Position in der Leitung, die eine Koinzidenz war, und die Zeichenfolge selbst.

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

Funktion replacer (str, p1, p2 , Offset-, s)
{
Rück 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, so hätte die Funktion hat , 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ück 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 beschrieben (Eng.) Beginning Reguläre Ausdrücke .