javascript 正則表達式

一、基礎

javascript 允許你通過以下兩種方式創建 RegExp 對象,1)直接量。2)使用 RegExp()

var pattern = /java$/;    //直接量創建
var pattern = new RegExp("java$");    

二、元字符

正則表達式中,字母和數字都是按照字面意思進行匹配的,同時javascript 也支持非字母的字符匹配.這些特殊字符需要通過反斜線(\)進行轉義.

元字符 描述
. 查找單個字符,除了換行和行結束符。
\w 任何 ascii 字母組成的單詞,等價於[a-zA-Z0-9]
\W 任何不是 ascii 字母組成的單詞,等價於[^a-zA-Z0-9]
\d 查找 ascii 的數字,等價於[0-9]
\D 查找非 ascii 數字字符,等價於 [^0-9]
\s 查找 unicode 空白字符。
\S 查找非 unicode 空白字符。
\b 匹配單詞邊界。
\B 匹配非單詞邊界。
\o 查找 NUL 字符。
\n 查找換行符。
\f 查找換頁符。
\r 查找回車符。
\t 查找製表符。
\v 查找垂直製表符。
\xxx 查找以八進制數 xxx 規定的字符。
\xdd 查找以十六進制數 dd 規定的字符。
\uxxxx 查找以十六進制數 xxxx 規定的 Unicode 字符。

三、量詞

量詞

描述

{n,m} 匹配前一項至少 n 次,但不超過 m 次
{n,} 匹配前一項至少 n 次(或大於 n 次)
{n} 匹配前一項 n 次
匹配前 一項 0 次或 1 次,等價於{0,1},即前一項可選
+ 匹配前一項 1 次或多次,等價於 {1,},
* 匹配前一項 0 次或多次,等價於{0,}

舉例如下:

/\d{3,9}\    //匹配 3~9個數字
/\d{3}\w?/    //匹配三個數組和一個可選字母
/\s+java\s+/  //匹配前後帶一個或多個空格的字符串“java”

在量詞匹配的情況下,還有一種討論——最長匹配原則和最短匹配原則(貪婪匹配和非貪婪匹配)。在量詞後{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”]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章