JavaScript系列之正則

ECMAScript5規範規定,同一段代碼所表示的正則表達式直接量的每次運算都返回新對象。(這裏須要注意)
在正則表達式中,許多標點符號具備特殊含義,它們是:正則表達式

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

若是想在正則表達式中使用這些字符的直接量進行匹配,則必須使用前綴,這是一條通行規則。數組

將直接量字符單獨放進方括號內就組成了字符類。一個字符類能夠匹配它所包含的任意字符。
正則表達式的重複字符語法函數

{n,m}匹配前一項至少n次,但不能超過m次
{n,}匹配前一項n次或者更屢次
{n}匹配前一項n次
? 匹配前一項0次或者1次 ,等價於{0,1}
+ 匹配前一項1次或者屢次,等價於{1,}
* 匹配前一項0次或者屢次,等價於{0,}

非貪婪匹配只須要在待匹配的字符後跟隨一個問號便可
正則表達式的模式匹配老是會尋找字符串中第一個可能匹配的位置。code

字符|用於分隔供選擇的字符。對象

(...)組合,將幾個項組合爲一個單元,並且能夠記住和整個組合相匹配的字符串以供此後的引用使用。
(?:...)只組合,把項組合到一個單元,但不記憶與該組相匹配的字符。
\n 和第n個分組第一次匹配的字符相匹配,組是圓括號中的子表達式,組索引是從左到右的左括號數。

^ 匹配字符串的開始,在多行檢索中,匹配一行的開始
$ 匹配字符串的結尾,在多行檢索中,匹配一行的結尾
\b 單詞邊界
\B 非單詞邊界
(?=p)  零寬正向先行斷言,要求接下來的字符都與p匹配,但不能包括匹配p的那些字符
(?!p)   零寬負向先行斷言,用以指定接下來的字符都沒必要與p匹配。

i  說明模式匹配是不區分大小寫
g 說明模式匹配是全局
m 在多行模式中執行匹配

用於模式匹配的String方法
search(),它的參數是一個正則表達式,返回第一個與之匹配的子串的起始位置,若是找不到匹配的子串,它將返回-1。若是其參數不是正則表達式,則首先會經過RegExp構造函數將它轉換成正則表達式,search()方法不支持全局檢索,由於它忽略正則表達式參數中的修飾符g索引

replace()方法用以執行檢索與替換操做。其中第一個參數是一個正則表達式,第二個參數是要進行替換的字符串(能夠是函數)。這個方法對調用它的字符串進行檢索。使用指定的模式來匹配。
若是在替換字符串中出現了$加數字,那麼replace()將用與指定的子表達式相匹配的文原本替換着這兩個字符。ip

match()方法是最經常使用的String正則表達式方法。它的惟一參數就是一個正則表達式(或經過RegExp()構造函數將其轉換爲正則表達式),返回的是一個由匹配結果組成的數組。爲了和方法replace()保持一致,a[n]存放的是$n的內容。字符串

('1 plus 2 equl 3').match(/\d+/)  //["1", index: 0, input: "1 plus 2 equl 3", groups: undefined]
('1 plus 2 equl 3').match(/\d+/g) //["1", "2", "3"]
('1 plus 2 equl 3').match(/(\d+)/) //["1", "1", index: 0, input: "1 plus 2 equl 3", groups: undefined]

split()方法的參數也能夠是一個正則表達式。input

RegExp對象
RegExp()構造函數帶有兩個字符串參數,第一個參數包含正則表達式的主體部分,也就是正則表達式直接量中兩條斜線之間的文本,其中第二個參數是可選的。it

source是一個只讀字符串,包含正則表達式的文本。
global是一個只讀的布爾值,用以說明這個正則表達式是否帶有修飾符g。
ignoreCase是一個只讀的布爾值,用以說明正則表達式是否帶有修飾符i。
multiline是一個只讀的布爾值,用以說明正則表達式是否帶有修飾符m。
lastIndex是一個可讀/寫的整數。若是匹配模式帶有g修飾符,這個屬性存儲在整個字符串中下一次檢索的開始位置,這個屬性會被exec()和test()方法用到。

exec()方法對一個指定的字符串執行一個正則表達式,若是它沒有找到任何匹配,它就返回null,但若是它找到了一個匹配,它將返回一個數組。這個數組的第一個元素包含的是與正則表達式相匹配的字符串,餘下的元素是與圓括號內的子表達式相匹配的子串。屬性index包含了發生匹配的字符位置,屬性input引用的是正在檢索的字符串。

var str='1 plus 2 equl 3'
/\d+/.exec(str)  //["1", index: 0, input: "1 plus 2 equl 3", groups: undefined]
/(\d+)/.exec(str) //["1", "1", index: 0, input: "1 plus 2 equl 3", groups: undefined]

//ECMAScript5規範規定,同一段代碼所表示的正則表達式直接量的每次運算都返回新對象。(這裏須要注意)
(/(\d+)/g).exec(str) //["1", "1", index: 0, input: "1 plus 2 equl 3", groups: undefined]
(/(\d+)/g).exec(str) //["1", "1", index: 0, input: "1 plus 2 equl 3", groups: undefined]

var reg=/(\d+)/g
reg.exec(str) // ["1", "1", index: 0, input: "1 plus 2 equl 3", groups: undefined]
reg.exec(str) // ["2", "2", index: 0, input: "1 plus 2 equl 3", groups: undefined]

test()方法的參數是一個字符串,若是包含正則表達式的一個匹配結果,則返回true。調用test()和exec()等價,當exec()的返回結果不是null時,test()返回true。

相關文章
相關標籤/搜索