Heim  >  Artikel  >  Web-Frontend  >  Reguläre Ausdrücke in js (1)

Reguläre Ausdrücke in js (1)

伊谢尔伦
伊谢尔伦Original
2016-11-22 14:34:18937Durchsuche

Die Bedeutung des Zeichens

wird verwendet, um die Bedeutung zu ändern, d Wird vor b, /b/ hinzugefügt, lautet die geänderte Bedeutung „Entspricht einer Wortgrenze“. -oder- Wiederherstellung von Funktionszeichen für reguläre Ausdrücke, z. B. „*“, die 0-mal oder öfter mit dem Metazeichen davor übereinstimmen, /a*/ stimmt mit a, aa, aaa überein, nach dem Hinzufügen von „“ stimmt /a*/ nur mit „ überein A*". ^ entspricht einer Eingabe oder dem Anfang einer Zeile, /^a/ entspricht „an A“, aber nicht „An a“ $ entspricht einer Eingabe oder dem Ende einer Zeile, /a$/ entspricht „An a“, stimmt aber nicht mit „an A“ überein* stimmt mindestens 0 Mal mit dem vorhergehenden Metazeichen überein, /ba*/ stimmt mit b, ba, baa, baaa überein, stimmt mindestens 1 Mal mit dem vorhergehenden Metazeichen überein, /ba*/ stimmt mit ba, baa überein , baaa? stimmt 0 oder 1 Mal mit dem vorhergehenden Metazeichen überein, /ba*/ stimmt mit b überein, ba(x) stimmt mit x überein, speichert x in einer Variablen namens $1...$9, x|y stimmt mit x oder y{n überein } trifft genau n-mal zu { n,} trifft mehr als n-mal zu {n,m} trifft n-m-mal zu [xyz] Zeichensatz (Zeichensatz), entspricht jedem Zeichen (oder Metazeichen) in diesem Satz [^xyz] stimmt nicht überein Jedes Zeichen in diesem Satz. Jedes Zeichen [b] entspricht einer Rücktaste, b entspricht einer Wortgrenze, B entspricht einer Nicht-Wortgrenze, cX. Hier ist X ein Steuerzeichen, /cM/ entspricht Strg-Md, entspricht einem alphanumerischen Zeichen, /d/ = /[0-9]/D entspricht einem nicht-alphanumerischen Zeichen, /D/ = /[^0-9]/n entspricht einem Zeilenumbruchzeichen, r entspricht einem Wagenrücklaufzeichen, s entspricht einem Leerzeichen, einschließlich n, r, f , t , v und andere S stimmen mit einem Nicht-Leerzeichen überein, das gleich /[^nfrtv]/t ist, mit einem Tabulatorzeichen übereinstimmt v mit einem geraden Tabulatorzeichen übereinstimmt w mit einem Zeichen übereinstimmt, das ein Wort bilden kann (alphanumerisch, das ist mein freie Übersetzung, einschließlich Zahlen ), einschließlich Unterstrichen, wie z. B. [w] passend zur 5 in „$5,98“, gleich [a-zA-Z0-9] W passend zu einem Zeichen, das kein Wort bilden kann, wie z. B. [W] passend das $ in „$5,98“, gleich [^a-zA-Z0-9].

Es ist besser, re = new RegExp("pattern",["flags"]) zu verwenden
pattern: regulärer Ausdruck
flags: g (alle Vorkommen von Muster im Volltext durchsuchen)
i (Groß- und Kleinschreibung ignorieren)
m (mehrzeilige Suche) Frage zu dynamischen regulären JavaScript-Ausdrücken Können reguläre Ausdrücke dynamisch generiert werden?
Zum Beispiel in JavaScript:
var str = "strTemp";
Zum Generieren:
var re = /strTemp/;
Wenn es sich um eine Zeichenverbindung handelt:
var re = "/" str "/" reicht
Aber um einen Ausdruck zu generieren, ist ist es möglich? Wie implementiert man?

Ein regulärer Ausdruck ist ein Objekt, das ein Zeichenmuster beschreibt.
Das RegExp-Objekt und das String-Objekt von JavaScript definieren Methoden zur Verwendung regulärer Ausdrücke, um leistungsstarke Mustervergleichs- und Textabruf- und Ersetzungsfunktionen auszuführen.


In JavaScript werden reguläre Ausdrücke dargestellt durch ein RegExp-Objekt. Natürlich können Sie einen RegExp()-Konstruktor verwenden, um ein RegExp-Objekt zu erstellen.
Sie können auch eine spezielle Syntax verwenden, die in JavaScript 1.2 neu hinzugefügt wurde, genau wie Zeichen definiert als in Anführungszeichen eingeschlossene Zeichen,
reguläre Ausdrucksliterale werden als zwischen einem Schrägstrichpaar (/) eingeschlossene Zeichen definiert. JavaScript könnte also Code wie den folgenden enthalten:

var pattern = /s$/;

Diese Codezeile erstellt ein neues RegExp-Objekt und weist es dem Variablenmuster zu. Dieses spezielle RegExp-Objekt und alles, was mit dem Buchstaben „s“ beginnt, können mit RegExp() abgeglichen werden Definieren Sie auch
einen äquivalenten regulären Ausdruck. Der Code lautet wie folgt:

var pattern = new RegExp("s$");

Ob Sie ein reguläres Ausdrucksliteral oder den Konstruktor verwenden RegExp() ist relativ einfach, ein RegExp-Objekt zu erstellen. Die schwierigere Aufgabe besteht darin, die Syntax regulärer Ausdrücke zu verwenden, um das Zeichenmuster zu beschreiben.
JavaScript übernimmt Es ist eine ziemlich vollständige Teilmenge der regulären Ausdruckssyntax der Perl-Sprache 🎜>

Die Musterspezifikation eines regulären Ausdrucks besteht aus einer Reihe von Zeichen (einschließlich aller alphanumerischen Zeichen), die entsprechend beschrieben werden. Auf diese Weise entspricht der reguläre Ausdruck /java/

Alle Zeichenfolgen, die den Teilstring „java“ enthalten, werden zwar nicht wörtlich zugeordnet, aber sie haben alle eine besondere Bedeutung. Der reguläre Ausdruck /s$/ enthält zwei Zeichen. s“ stimmt wörtlich mit sich selbst überein. Das zweite Zeichen „$“ ist ein Sonderzeichen, das dem Ende der Zeichenfolge entspricht. Der reguläre Ausdruck /s$/ entspricht also der Zeichenfolge, die mit dem Buchstaben „s“ endet
.

1. Direkte Zeichen

Wir haben festgestellt, dass alle alphabetischen Zeichen und Zahlen in regulären Ausdrücken auch durch Escape-Sequenzen unterstützt werden, die mit einem Backslash () beginnen. Bestimmte Nicht-

alphabetische Zeichen. Die Sequenz „n“ entspricht beispielsweise einem wörtlichen Zeilenumbruchzeichen in der Zeichenfolge. In regulären Ausdrücken haben viele Satzzeichen eine besondere Bedeutung:

Wörtliche Zeichen von reguläre Ausdrücke

Zeichenübereinstimmung
____________________________
Alphanumerisches Zeichen selbst
f Seitenvorschubzeichen
n Zeilenvorschubzeichen
r Wagenrücklauf
t Tabulatorzeichen
v vertikales Tabulatorzeichen
/ a/ direkte Menge
* a * direkte Menge
? eine direkte Menge
|
( a ( direkte Menge
) a ) direkte Menge
[ a [ direkte Menge
] a ] direkte Menge
{ a { direkte Menge
} a } direkte Menge
XXX Das durch die Dezimalzahl XXX angegebene ASCII-Codezeichen
n

_____________________________________________________

Wenn Sie spezielle Satzzeichen in regulären Ausdrücken verwenden möchten, müssen Sie ihnen ein „“ voranstellen.

2. Zeichenklasse

Setzen Sie einzelne direkte Zeichen in eckige Klammern, um Zeichenklassen zu bilden, sodass der reguläre Ausdruck / [abc] / und die Buchstaben „ a“, „Jedes

in b“ oder „c“ wird übereinstimmen. Darüber hinaus können Sie auch negative Zeichenklassen definieren, die mit allen Zeichen außer den in eckigen Klammern enthaltenen Zeichen übereinstimmen. Beim Definieren des negativen Zeichentipps: Zu verwenden ein ^-Symbol als

tes Zeichen, beginnend mit der linken Klammer. Der Satz regulärer Ausdrücke ist / [a-zA-z0-9] / .

Da einige Zeichenklassen sehr häufig verwendet werden, so Die reguläre Ausdruckssyntax von JavaScript enthält einige Sonderzeichen und Escape-Sequenzen, um diese häufig verwendeten Klassen darzustellen. Beispielsweise entspricht s Leerzeichen, Tabulatoren und anderen Leerzeichen, und s
entspricht allen anderen Zeichen als den Zeichen

Reguläre Gray-Type-Zeichenklasse


Zeichenübereinstimmungen

________________________________________________________

[...] Alle Zeichen in Klammern

[^...] Alle Zeichen, die nicht in Klammern stehen

außer Zeilenumbruch, äquivalent zu [^n]
w Jedes einzelne Zeichen, äquivalent zu [a-zA-Z0 -9]
W Jedes nicht-einzelne Zeichen, äquivalent zu [^a-zA-Z0-9 ]
s Jedes Leerzeichen, äquivalent zu [t n r f v]
S Jedes Nicht-Leerzeichen, äquivalent in [^ t n r f v]
d jede Zahl entspricht [0-9]
D jedes Zeichen Anders als Zahlen entspricht [^0-9]
[b] einer Rücktaste. Direkte Menge (Sonderfall)
______________________________________________________________

3. Unter Verwendung der obigen regulären Tabelle Syntax: Zweistellige Zahlen können als / d d / und vierstellige Zahlen als / d d d d / beschrieben werden. Wir haben jedoch noch keine Möglichkeit, eine Zahl mit einer beliebigen Anzahl von Ziffern oder einem
zu beschreiben
Zeichenfolge. Diese Zeichenfolge besteht aus drei Zeichen und einer Ziffer nach dem Buchstaben. Diese komplexen Muster verwenden eine reguläre Ausdruckssyntax, die angibt, wie oft jedes Element im Ausdruck wiederholt werden soll Zeichen erscheinen immer nach dem Muster, nach dem sie wirken. Daher werden einige Sonderzeichen speziell für ihre Darstellung verwendet. Zum Beispiel: Das Symbol entspricht einem Muster, das das vorherige Muster einmal kopiert >

oder mehrfach. Die folgende Tabelle listet die Kopiersyntax auf. Ein Beispiel:

/d{2, 4}/ //Übereinstimmung mit Zahlen zwischen 2 und 4.

/w{3} d?/ //Entspricht drei Einzelwortzeichen und einer beliebigen Zahl.

/s javas // Entspricht der Zeichenfolge „java“, und davor und danach können ein oder mehrere Leerzeichen stehen die Zeichenfolge.

/[^"] * / // Entspricht null oder mehr Zeichen, die keine Anführungszeichen sind.

Zeichen des regulären Ausdrucks kopieren

Zeichenbedeutung

______________________________________________________________________________________

{n, m} stimmt mindestens n-mal mit dem vorherigen Element überein, darf jedoch nicht mehr als m-mal übereinstimmen.

{n, } stimmt n-mal oder mehrmals mit dem vorherigen Element überein.

{n} stimmt mit dem vorherigen Element überein genau n-mal

? Passt 0 oder 1 Mal zum vorherigen Element, das heißt, das vorherige Element ist äquivalent zu {0, 1}

, das 1 oder mehr Mal mit dem vorherigen Element übereinstimmt entspricht {1,}

* entspricht dem vorherigen Element 0 oder mehr Mal. Entspricht {0,}

4 Die Syntax regulärer Ausdrücke umfasst auch die Angabe von Auswahlelementen sowie das Gruppieren und Referenzieren von Unterausdrücken. Das Sonderzeichen | wird zum Trennen der Zeichen für die Auswahl verwendet. Beispiel: /ab|cd|ef/ entspricht der Zeichenfolge „ab“. ", oder die


Zeichenfolge "cd" oder "ef". /d{3}|[a-z]{4}/ entspricht entweder einer dreistelligen Zahl oder vier Kleinbuchstaben. Klammern haben mehrere Funktionen in Reguläre Ausdrücke. Die Hauptfunktion besteht darin, einzelne Elemente

in Unterausdrücke zu gruppieren, sodass diese Elemente wie eine unabhängige Einheit mit * oder ? verarbeitet werden können. Beispiel: /java(script) ?/ entspricht The Auf die Zeichenfolge „java“ kann „script“ folgen oder auch nicht. /

(ab|cd) |ef) / Entspricht entweder der Zeichenfolge „ef“ oder einem Zeichen. Eine oder mehrere Wiederholungen der Zeichenfolge „ab " oder "cd".

In regulären Ausdrücken besteht die zweite Verwendung von Klammern darin, Untermuster innerhalb des vollständigen Musters zu definieren. Wenn ein regulärer Ausdruck erfolgreich mit der Zielzeichenfolge übereinstimmt, kann er aus der Zielzeichenfolge extrahiert werden, um dem Untermuster in Klammern
zu entsprechenAngenommen, das Muster, das wir abrufen, besteht aus einem oder mehreren Buchstaben, gefolgt von einer oder mehreren Ziffern, dann können wir das Muster /[a-z]d/ verwenden Wichtig ist, dass jeder mit den Ziffern am Ende von

übereinstimmt. Wenn wir dann den numerischen Teil des Musters in Klammern setzen (/ [a-z] (d )/) , können wir die Ziffern aus jeder abgerufenen Übereinstimmung extrahieren , Wir werden dies später analysieren. Eine andere Verwendung von

Unterausdrücken in Klammern besteht darin, uns später im selben regulären Ausdruck auf einen früheren Unterausdruck zu beziehen Ziffern. Die Zahl bezieht sich auf die Position des Unterausdrucks

im regulären Ausdruck. Beispielsweise bezieht sich 1 auf den Unterausdruck der dritten Klammer Da Unterausdrücke in anderen Unterausdrücken verschachtelt sein können, ist

seine Position die Position der gezählten linken Klammer.

Zum Beispiel: Im folgenden regulären Ausdruck wird er als 2 angegeben:
/([Jj ]ava([Ss]cript)) sis s (funw*) /

im regulären Ausdruck Der Verweis auf den vorherigen Unterausdruck gibt nicht das Muster dieses Unterausdrucks an, sondern den Text, der diesem Muster entspricht Auf diese Weise ist die Referenz nicht nur eine schnelle Möglichkeit, die wiederholten Teile des regulären Ausdrucks einzugeben

Verknüpfung, sondern implementiert auch eine Konvention, dass jeder einzelne Teil einer Zeichenfolge beispielsweise genau dieselben Zeichen enthält : Der folgende reguläre Ausdruck entspricht allen Zeichen in einfachen oder doppelten Anführungszeichen

. Es ist jedoch erforderlich, dass die öffnenden und schließenden Anführungszeichen übereinstimmen (z. B. sind beide doppelte Anführungszeichen oder beide einfache Anführungszeichen):

/[' "] [^ ' "]*[' "]/

Wenn eine Übereinstimmung der öffnenden und schließenden Anführungszeichen erforderlich ist, können wir das folgende Anführungszeichen verwenden:

/( [' " ] ) [^ ' "] * 1/

1 Entspricht dem Muster, das mit dem ersten Klammer-Unterausdruck übereinstimmt. In diesem Beispiel wird eine Konvention implementiert, nach der das öffnende Anführungszeichen mit dem schließenden Anführungszeichen übereinstimmen muss. Beachten Sie, dass der Backslash folgt mehr Ziffern als die Anzahl der Unterausdrücke in den Klammern

, dann wird es als dezimale Escape-Sequenz und nicht als Referenz geparst. Sie können darauf bestehen, die vollständigen drei Zeichen zur Darstellung der Escape-Sequenz zu verwenden , dies kann Verwirrung vermeiden. Beispielsweise wird

verwendet

有关正则表达式的语法还有最后一个元素,那就是正则表达式的属性,它说明的是高级模式匹配的规则.和其它正则表达式语法不同,属性是在 / 符号之外说明的.即它

们不出现在两个斜杠之间,而是位于第二个斜杠之后.javascript 1.2支持两个属性.属性 i 说明模式匹配应该是大小写不敏感的.属性 g 说明模式匹配应该是全局的.也

就是说,应该找出被检索的字符串中所有的匹配.这两种属性联合起来就可以执行一个全局的,大小写不敏感的匹配.

例如: 要执行一个大小不敏感的检索以找到词语 "java" (或者是 "java" 、"JAVA"等) 的第一个具体值,我们可以使用大小不敏感的正则表达式 /\b java\b/i .如果要在

一个字符串中找到 "java" 所有的具体值,我们还可以添加属性 g, 即 /\b java \b/gi .

以下是正则表达式的属性:

字符 含义
_________________________________________
i 执行大小写不敏感的匹配
g 执行一个全局的匹配,简而言之,就是找到所有的匹配,而不是在找到第一个之后就停止了
_________________________________________

除属性 g 和 i 之外,正则表达式就没有其它像属性一样的特性了.如果将构造函数 RegExp 的静态属性 multiline 设置为 true ,那么模式匹配将以多行的模式进行.在这

种模式下,锚字符 ^ 和 $ 匹配的不只是检索字符串的开头和结尾,还匹配检索字符串内部的一行的开头和结尾.例如: 模式 /Java$/ 匹配的是 "Java",但是并不匹配

"Java\nis fun" .如果我们设置了 multiline 属性,那么后者也将被匹配:

RegExp.multiline = true;在JAVASCRIPT里面判断一个字符串是否是电子邮件的格式:if(formname.email.value!=formname.email.value.match(/^\w +[@]\w +[.][\w.] +$/)){alert("您的电子邮件格式错误!");formname.email.focus();return false;}    

[RED]function dateVerify(date){
var reg = /^(\d{4})(-)(\d{2})\2(\d{2})$/;
var r = date.match(reg);
if(r==null) return false;
var d= new Date(r[1], r[3]-1,r[4]);
var newStr=d.getFullYear()+r[2]+(d.getMonth()+1)+r[2]+d.getDate();
date=r[1]+r[2]+((r[3]-1)+1)+r[2]+((r[4]-1)+1);
return newStr==date;
}[/RED]

javascript的17种正则表达式

"^\\d+$"  //非负整数(正整数 + 0)
"^[0-9]*[1-9][0-9]*$"  //正整数
"^((-\\d+)|(0+))$"  //非正整数(负整数 + 0)
"^-[0-9]*[1-9][0-9]*$"  //负整数
"^-?\\d+$"    //整数
"^\\d+(\\.\\d+)?$"  //非负浮点数(正浮点数 + 0)
"^(([0-9]+\\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\\.[0-9]+)|([0-9]*[1-9][0-9]*))$"  //正浮点数
"^((-\\d+(\\.\\d+)?)|(0+(\\.0+)?))$"  //非正浮点数(负浮点数 + 0)
"^(-(([0-9]+\\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\\.[0-9]+)|([0-9]*[1-9][0-9]*)))$"  //负浮点数
"^(-?\\d+)(\\.\\d+)?$"  //浮点数
"^[A-Za-z]+$"  //由26个英文字母组成的字符串
"^[A-Z]+$"  //由26个英文字母的大写组成的字符串
"^[a-z]+$"  //由26个英文字母的小写组成的字符串
"^[A-Za-z0-9]+$"  //由数字和26个英文字母组成的字符串
"^\\w+$"  //由数字、26个英文字母或者下划线组成的字符串
"^[\\w-]+(\\.[\\w-]+)*@[\\w-]+(\\.[\\w-]+)+$"    //email地址
"^[a-zA-z]+://(\\w+(-\\w+)*)(\\.(\\w+(-\\w+)*))*(\\?\\S*)?$"  //ur

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
Vorheriger Artikel:Reguläre Ausdrücke in js (2)Nächster Artikel:Reguläre Ausdrücke in js (2)