JAVASCRIPT 2010-05-19 14:23:50 閱讀22 評論0 字號:大中小 訂閱
1)RegExp類構(gòu)造正則表達式
RegExp的構(gòu)造函數(shù)接受兩個參數(shù),第一個是描述需要進行匹配的模式字符串;第二個指定額外的處理命令(可選)
eg. var reCat = new RegExp("cat", "gi"); //g表示匹配所有的"cat",i表示不區(qū)分大小寫;默認只匹配第一個出現(xiàn)的,而且區(qū)分大小寫
另一種寫法 var reCat = /cat/gi;
2)四種匹配正則表達式的方法
>> RegExp對象的
① test()方法
var a = "car"; var b = /car/; alert(b.test(a));
即使只出現(xiàn)一次也返回true,一次都沒出現(xiàn)則返回false
② exec()方法
返回一個數(shù)組,數(shù)組的第一個條目是第一個匹配,其他的是反向引用
var a = "a bat, a Cat, a fAt baT, a faT cat"; var b = /at/; var arrMatch = b.exec(a);
arrMatch只包含一個條目:第一個at的實例
>> String對象的
① match()方法
返回一個包含在字符串中的所有匹配的數(shù)組,接受 /gi
② search()方法
返回第一個匹配的位置,類似indexOf(),無視參數(shù) /g
>> 備注
此外,String類的replace()和split()方法也可以用正則表達式當參數(shù)
3)元字符
以匹配問號為例,說下兩種構(gòu)造正則表達式方法的區(qū)別
var a = /\?/ ; var a = new RegExp("\\?") ;
4) 字符類
① 簡單類 eg. [abc] 匹配a,b,c
② 負向類 eg. ^ab 不匹配a, b
③ 范圍類 [a-z] 匹配a到z
④ 組合類 [a-m1-4] 中間不能有空格
⑤ 預定義類
. = [^\n\r] = 除換行、回車外的任意字符
\d = [0-9] = 數(shù)字
\D = [^0-9] = 非數(shù)字字符
\s = [\t\n\x0B\f\r] = 空白字符
\S = [^ \t\n\x0B\f\r] = 非空白字符
\w = [a-zA-Z_0-9] = 單詞字符(字母數(shù)字下劃線)
\W = [^ a-zA-Z_0-9] = 非單詞字符
5)量詞
① 簡單量詞
? 出現(xiàn)0次或1次
* 0次或多次
+ 1次或多次
{n} n次
{n,m} 至少n次,至多m次
{n, } 至少n次
② 貪婪的、惰性的和支配性的量詞
greedy quantifier:先看整個字符串是不是匹配,不是就去掉最后一個字符再嘗試,一直重復直至不剩字符;①點里的量詞都是greedy
reluctant quantifier:看第一個字符是否匹配,不是就讀入下一個,一直重復道讀入整個字符串,和greedy相反;greedy的表達符號后加? 表示reluctant
possessive quantifier:只嘗試匹配整個字符串,不能則不作進一步嘗試;greedy的表達符號后加 + 表示possessive
③ 備注:IE和Opera不支持支配量詞,Mozilla會把支配看成貪婪
6)復雜模式
① 分組
幾個例子,自己看:
var reDogDog = /(dog){2} /g;
var re1 = /(dog)?/; //match zero or one occurrences of dog
var re = /([bd]ad?)*/ ; //match zero or more occurrences of "ba" "da" "bad" "dad"
var re = /(mon( and dad)?)/; //match "mon" or "mon and dad"
.trim() 可以清除空格
② 反向引用(backreference)
表達式計算完后,每個分組都被存放在一個特殊的地方以備將來使用,這些存儲在分組中的特殊值成為反向引用
反向引用是按照從左到右遇到的左括號字符的順序進行創(chuàng)建和編碼的,分別用$1,$2,$3...表示(或\1,\2,\3...)
③ 候選(|)
用管道符分別對字符串進行匹配。因為兩個備選項存放在一個分組中,不管哪個被匹配了,都會存在RegExp.$1中以備將來使用
var reRedOrBlack = /(red|black)/;
通常的用途是論壇屏蔽敏感詞,eg.