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.
RegExp - Objekt
Das RegExp - Objekt - Typ, oder, kurz gesagt, reguläre Ausdrücke, können Sie eine Zwei-Wege schaffen
/ Muster / Fahnenneue 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 / ivar reg = new RegExp ( "ab + c", "i")
Auf dem zweiten Anruf - tk regulären Ausdruck in Anführungszeichen, ist es notwendig , die zu duplizieren \
// gleichwertigre = new RegExp ( "\\ w +")
re = / \ w + /
Bei der Suche können Sie die meisten Funktionen der modernen PCRE-Syntax.
Sonderzeichen in den regulären Ausdruck
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). |
Überprüfen Ergebnisse: Prüfverfahren
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! ...
}
Matching: exec Methode
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 3Gefunden 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!")
}
String - Methoden, Suchen und Ersetzen
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"))Das Verfahren zur Suche (Wildcards)
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) ;
}
Die Methode Match (Wildcards)
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 Sie ersetzen
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".
Sonderzeichen in der Ersatz - String
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. |
Ersatz der Funktion
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);
}
zusätzlich
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 .
Kommentare
im Auge kommentierte halten , dass der Inhalt und der Ton Ihrer Nachrichten , die Gefühle von echten Menschen verletzen können, Respekt und Toleranz gegenüber seinen Gesprächspartnern, auch wenn Sie Ihr Verhalten in Bezug auf die Meinungsfreiheit und die Anonymität des Internets, ändert ihre Meinung nicht teilen, nicht nur virtuell, sondern realen Welt. Alle Kommentare werden aus dem Index, Spam - Kontrolle versteckt.