一、創建正則對象:
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 搜索匹配的開始位置(可讀寫)
數字正則:-?(\d+|\d+\.\d+|\.\d+)([eE][-+]?\d+)?