JavaScript正則表達式基礎知識彙總

推薦:http://deerchao.net/tutorials/regex/regex.htm講解詳細,便於理解


轉自:http://www.cnblogs.com/yangjunhua/archive/2012/12/11/2812405.html


一、創建正則對象:

1、構造函數RegExp創建正則對象

1 var pattern = new RegExp('s$'); //pattern匹配以s結尾的字符串

 

2、使用正則直接量

1 var pattern = /s$/; //建議這樣寫

 

二、正則表達式字符

1、反斜線\ 在正則表達式中表示轉義序列

特殊符號:

^ $ . * + ? = ! : | \ / ( ) [ ] { }

如果想要在正則表達式中匹配它們,應該在他們前面加上反斜線,如:

var pattern = /\$/; //pattern匹配$符號

 

2、直接量字符


字符    匹配
\o     NUL字符(\u0000)
\t     製表符(\u0009)
\n     換行符(\u000A)
\v     垂直製表符(\u000B)
\f     換頁符
\r     回車符
\xnn   由十六進制數nn指定的拉丁字符,例如:\x0A等價於\n
\uxxxx 由十六進制數xxxx指定的Unicode字符,例如:\u0009等價於\t
\cX    控制字符^X。例如:\cJ等價於換行符\n

 

3、字符類


字符         匹配
[...]       方括號內的任意字符
[^...]      非方括號內的任意字符
[0-9]       0-9之間的數字
[a-z]       小寫的拉丁字母
[A-Z]       大寫的拉丁字母
[0-9a-zA-Z] 數字和大小寫拉丁字母

 

下面也屬於字符類:

.    除換行符和其他Unicode行終止符之外的任意字符
\s   任意Unicode空白符 
\S   任意非Unicode空白符
\d   任意ASCII碼數字,等同於[0-9]
\D   任意非ASCII碼數字的字符,等同於[^0-9]
\w   任意ASCII碼單詞字符,等同於[a-zA-Z0-9_]
\W   任意非ASCII數字,等同於[^a-zA-Z0-9_]
[\b] 在字符類中表示退格直接量

 

4、重複字符類

貪婪的重複字符

字符      匹配
{n,m}  前一項至少n次,但不能超過m次
{n,}   前一項至少n次
{n}    前一項恰好n次
?      前一項0次或1次,等價於{0,1}
+      前一項至少一次,等價於{1,}
*      前一項0次或多次,等價於{0,}

 

非貪婪的重複匹配只需在貪婪的重複字符後面加上一個?(問號),且問號後沒有其他表達式字符,否則非貪婪匹配忽略。例:

 1 var str = 'aaaaaa',
 2 str2 = 'aaaaaabc',
 3 pattern = /a+/,
 4 pattern2,
 5 pattern3;
 6     
 7 pattern.exec(str); //全部匹配
 8 
 9 pattern2 = /a+?/;
10 pattern2.exec(str); //只匹配了變量str中的第一個a
11 
12 pattern3 = /a+?bc/13 pattern3.exec(str2); //全部匹配,匹配結果爲aaaaaabc

 

5、選擇,分組,引用

字符        含義
|          表示或,用於分隔選擇
()         子表達式(子模式),可以引用子模式匹配結果
(?:)       子表達式(子模式),可以引用子模式匹配結果,但是子模式匹配結果不出現在正則匹配結果集中
\n(n爲數字) 引用對應的子模式匹配結果

例:

1 var pattern = /Java(?:Script)?(&VB\1)?/g,
2 str = 'JavaScript&VBScript';
3 
4 pattern.exec(str); //全部匹配,\1表示Script字符串
5 pattern.lastIndex = 0; //當正則對象擁有全局g標識時,如果同一個正則對象進行第二次匹配時,須將它的lastIndex重置爲 0
6 pattern.exec(str); //第二次全部匹配

 

下面情況可能存在不能實現的期望:


var pattern = /(Java(?:Script))?&?(VB\2)?/,  //或者寫成pattern = /Java(?:Script)|(VB\1)?/;
str = 'VBScript';
pattern.exec(str);  //不能匹配VBScript,\2表示爲空,結果匹配VB子串

var str2 = 'JavaScript&VBScript';
pattern.exec(str2);  //這樣可以全部匹配

//此例說明應該注意自己引用的子模式是否爲空

 

6、位置字符


字符    匹配
^      字符串的開頭
$      字符串的結尾
\b     位於\w(單詞字符)與\W(非單詞字符)的邊界或位於一個ASCII單詞字符與一個字符串的開頭和結尾之間的邊界
\B     非詞語之間的位置
(?=p)  正前向聲明,要求接下來的字符與模式p匹配,但是不包括匹配中的那些字符
(?!p)  反前向聲明,要求接下來的字符不與模式p匹配

例:

1 var url = 'vip.etao.com/youhui.htm?drawCredits',
2 pattern = /\byouhui\b/,
3 pattern2 = /^vip\.etao\.com\/.+drawcredits$/i;
4 pattern.exec(url); //匹配youhui子串
5 pattern2.exec(url); //全部匹配url變量值 

 

三、正則對象標誌,屬性,及方法

1、標誌

標誌  含義
g    全局匹配
i    不區分大小寫
m    多行匹配

2、方法

exec     接受一個字符串參數,返回由完全匹配和子表達式匹配結果組成的數組
test     接受一個字符串參數,返回boolean值
compile  編譯正則表達式

3、屬性

source     正則表達式的文本
global     是否擁有全局搜索標誌g
ignoreCase 是否擁有標誌i
multiline  是否擁有標誌m
lastIndex  搜索匹配的開始位置(可讀寫)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章