一、基礎
javascript 允許你通過以下兩種方式建立 RegExp 對象,1)直接量。2)使用 RegExp()
二、元字元
正規表達式中,字母和數字都是按照字面意思進行比對的,同時javascript 也支援非字母的字元比對.這些特殊字元需要通過反斜線(\)進行轉義. 元字元 描述 <a href="http://blog.51cto.com/peiquan/1416684#">.</a> 查找單個字元,除了換行和行結束符。 <a href="http://blog.51cto.com/peiquan/1416684#">\w</a> 任何 ascii 字母組成的單詞,等價于[a-zA-Z0-9] <a href="http://blog.51cto.com/peiquan/1416684#">\W</a> 任何不是 ascii 字母組成的單詞,等價于[^a-zA-Z0-9] <a href="http://blog.51cto.com/peiquan/1416684#">\d</a> 查找 ascii 的數字,等價于[0-9] <a href="http://blog.51cto.com/peiquan/1416684#">\D</a> 查找非 ascii 數字字元,等價于 [^0-9] <a href="http://blog.51cto.com/peiquan/1416684#">\s</a> 查找 unicode 空白字元。 <a href="http://blog.51cto.com/peiquan/1416684">\S</a> 查找非 unicode 空白字元。 <a href="http://blog.51cto.com/peiquan/1416684">\b</a> 比對單詞邊界。 <a href="http://blog.51cto.com/peiquan/1416684">\B</a> 比對非單詞邊界。 \o 查找 NUL 字元。 <a href="http://blog.51cto.com/peiquan/1416684">\n</a> 查找換行符。 \f 查找換頁符。 \r 查找回車符。 \t 查找制表符。 \v 查找垂直制表符。 <a href="http://blog.51cto.com/peiquan/1416684">\xxx</a> 查找以八進制數 xxx 規定的字元。 <a href="http://blog.51cto.com/peiquan/1416684">\xdd</a> 查找以十六進制數 dd 規定的字元。 <a href="http://blog.51cto.com/peiquan/1416684">\uxxxx</a> 查找以十六進制數 xxxx 規定的 Unicode 字元。
三、量詞
量詞
{n,m}
比對前一項至少 n 次,但不超過 m 次
{n,}
比對前一項至少 n 次(或大于 n 次)
{n}
比對前一項 n 次
?
比對前 一項 0 次或 1 次,等價于{0,1},即前一項可選
+
比對前一項 1 次或多次,等價于 {1,},
*
比對前一項 0 次或多次,等價于{0,}
舉例如下:
在量詞比對的情況下,還有一種讨論——最長比對原則和最短比對原則(貪婪比對和非貪婪比對)。在量詞後{n,}?,??,+?,*?。
舉個列子來說明一下,如/a+/ 可以比對字元串”aaa”,盡比對一次。可換成/a+?/,這個也可以比對字元串“aaa”,不過這次比對了3次,非貪婪比對會盡可能少的比對,在一次比對中,隻要找到滿足條件的字元串就停止目前比對而開始下一次的比對。
四、選擇、分組和引用
字元“|”用于分隔供選擇的字元,如“/12|ab|c6/”可以比對字元串”12”,也可以比對字元串“ab”或者“c6”;/\d{4}|[a-z]{2,4}/ 可以用來比對四個數字或者至少兩個但不超過四個連續的小寫字母。
附帶重點說明一下:選擇項的比對次序是從左到右的,如果當中左邊的選擇項比對就忽略右邊的選擇項(即使右邊的選擇項有更好的比對,如/a|ab/
在正規表達式中,圓括号有着多種作用。
1)把單獨的項組合成一個子表達式。如 /(020-)?\d{8}/ 可以比對廣州固定電話的号碼,其可以包含分區号020-,也可以不包含。如/(ab|cd)+|\d+/ 可以比對一個或多個重複的字母ab或cd,也可以比對多個連續的字母。 2)在完整的模式中定義子模式——當一個正規表達式與目标字元串相比對時,可以提取圓括号比對的部分。如火車票的編号形式為/EE\d+/ , 現在我們需要提取出其中的數字,可以這樣操作 /EE(\d+)/。 3)允許同一正規表達式裡後部引用前面的子表達式(也可以叫做”反向引用“),通過符号 “\” 後加一個數字或多個數字來實作。如 \2 引用的是第二個帶圓括号的表達式。注意,因為在圓括号表達式可以嵌套,是以它的位置是參與計數的左括号的位置。如在一個句子中查找重複的單詞,可以這樣實作:/([a-zA-Z]+) +\1\b/
五、正規表達式的修飾符
字元
含義
i
不區分大小寫的比對
g
全局比對,即找到所有比對
m
多行比對,^比對一行的開頭和字元串的開頭,$比對行的結束和字元串的結束
六、javascript 裡正則對象的方法
方法
備注
compile
編譯正規表達式
RegExpObject.compile(regexp,modifier)
exec
檢索字元串中指定的值。傳回找到的值,和其比對的位置。如果沒有找到,傳回 null
如果在一個字元串中完成了一次模式比對之後要開始檢索新的字元串,就必須手動地把 lastIndex 屬性重置為 0。
test
判斷字元串中是否包含指定的值,傳回 true 或者 false
七、String 裡用于模式比對的方法
search
檢索與正規表達式相比對的值。str.search(regexp)
str.search(str2)
傳回第一個與 regexp 相比對的子串的起始位置。注意,search方法不支援全局搜尋;如果傳給search的參數不是regexp對象,會RegExp的構造函數将其轉換為一個 regexp 對象
match
找到一個或多個正規表達式的比對
str.match(regexp)
str.match(str2)
如:”1 + 2 = 3”.match(/\d+/g) 會傳回 1,2,3
replace
替換與正規表達式比對的字元串
str.replace(regexp|str2,replacement)
如:”I love you”.replae(/love/,"hate”) ;傳回 I hate you.
spilt
把字元串分隔成字元串數組。
str.spilt(regexp|str,howmany)
如:“1,2,3”.spilt(“,”) 傳回 [“1”,”2”",”3”]
本文轉自peiquan 51CTO部落格,原文連結:http://blog.51cto.com/peiquan/1416684