在 JS 中,正則表達式是個 RegExp
對象,具備 exec
,test
方法。而在 String
對象中,也存在 match
,replace
,search
,split
操做正則表達式的方法。正則表達式
JS 中的正則表達式有兩種聲明方式(對象字面量 / 構造函數),都會生產一個 RegExp
對象的實例。數組
/pattern/flags new RegExp(pattern[, flags])
實例函數
var pattern = /quick\s(brown).+?(jumps)/ig; var pattern = new RegExp("quick\\s(brown).+?(jumps)","ig");
實例以後的 pattern
對象就具備如下屬性:ui
lastIndex
:下次開始匹配的字符串位置,如果無設置全局模式,會始終爲 0ignoreCase
:是否設置忽略大小寫模式global
:是否設置了全局匹配模式multiline
:是否設置了多行模式source
:正則表達式的文本內容注意使用構造函數聲明正則表達式的時候,需合理使用轉義符。code
方法對象
RegExp.exec
檢索字符串中指定的值。返回一個結果數組。該方法老是返回單詞匹配的結果。字符串
在正則表達式設置了 g
模式的狀況下,會同時更新 RegExp
對象的 lastIndex
屬性。input
var result = re.exec('The Quick Brown Fox Jumps Over The Lazy Dog'); // console.log(result) // ["Quick Brown Fox Jumps", "Brown", "Jumps"] var pattern = /ab*/g; var str = 'abbcdefabh'; var matchArray; while ((matchArray = pattern.exec(str)) !== null) { var msg = 'Found ' + matchArray[0] + '. '; msg += 'Next match starts at ' + pattern.lastIndex; //console.log(msg); // Found abb. Next match starts at 3 // Found ab. Next match starts at 9 }
使用循環的時候,不要把正則表達式的操做放置在循環體中(這樣每次都會從新生成 RegExp
對象),同時必須設置全局模式,可能會形成死循環。it
RegExp.test
執行檢索字符串中指定值的操做。返回 true
或 false
。console
var pattern = /^\d{4}-\d{2}-\d{2}$/; var result = re.test('2010-12-20'); console.log(result) // true
在正則表達式設置了 g
模式的狀況下,跟 RegExp.exec
同樣,會同時更新 RegExp
對象的 lastIndex
屬性。
var pattern = /^\d{4}-\d{2}-\d{2}$/g; pattern.test('2010-12-20'); // true pattern.test('2010-12-20'); // false
RegExp.test
在匹配成功以後,各個捕獲分組的文本會保存下來,用 RegExp.$1
,RegExp.$2
··· 就能夠得到,不過,保存整個表達式匹配文本的 RegExp.$0
並不存在。
方法
String.match
返回一個結果數組或null
。
在正則表達式設置了 g
模式的狀況下,match
默認返回全部可能的匹配結果。
var str = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'; var re = /[A-E]/gi; var matches = str.match(re); console.log(matches); // ['A', 'B', 'C', 'D', 'E', 'a', 'b', 'c', 'd', 'e']
若是正則表達式沒有設置 g
模式,那麼 match
方法返回的結果與 RegExp.exec()
一致。
var str = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'; var re = /[A-E]/i; var matches_1 = str.match(re); var matches_2 = re.exec(str) console.log(matches_1, matches_2) //[ 'A', index: 0, input: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz' ]
該返回結果包含匹配的字符串,還有一個額外的 index
屬性,表示匹配字符串的位置,input
屬性便是所傳入的字符串。
String.search
返回第一次匹配的位置或 -1
該方法用來尋找某個正則表達式在字符串中第一次匹配成功的位置,失敗的時候返回 -1
。
這個方法只能找到「第一次」,即便設置了 g
模式,結果也不會有任何變化,因此若是須要使用一個正則表達式屢次驗證字符串,調用該方法判斷結果是否爲 0,是更好的辦法。
"1234".search(/^\d+$/g) == 0 // true "5678".search(/^\d+$/g) == 0 // true var pattern = /^\d+$/g; pattern.test("1234"); // true pattern.test("5678"); // false
String.split
使用一個正則表達式來切割字符串。返回數組
正則表達式是否設置了g
模式對結果沒有影響。
var matchArray = "a b c".split(/\s+/); console.log(matchArray); // ["a", "b", "c"]
也能夠設置第二個參數 limit
,指定返回數組的數目。在 JS 中,該參數取值的結果以下
取值 | 結果 |
---|---|
limit < 0 || limit > n | 等同於未指定 |
0<=limit<=n | 返回一個包含 n 元素的數組 |
var matchArray = "a b c".split(/\s+/,2); console.log(matchArray); // ["a", "b"]