1 RegExp之test
var r = /x/g;
var s = '_x_x';
r.lastIndex // 0
r.test(s) // true
r.lastIndex // 2
r.test(s) // true
r.lastIndex // 4
r.test(s) // false
如果正則表達(dá)式帶有g(shù)修飾符,則每一次test方法都從上一次結(jié)束的位置開始向后匹配。
正則表達(dá)式內(nèi)部會記住上一次的lastIndex屬性 。
var r = /x/g;
var s = '_x_x';
r.lastIndex = 4;
r.test(s) // false
r.lastIndex // 0
r.test(s)
帶有g(shù)修飾符時,可以通過正則對象的lastIndex屬性指定開始搜索的位置。
2 RegExp之exec
正則實例對象的exec方法,用來返回匹配結(jié)果。如果發(fā)現(xiàn)匹配,就返回一個數(shù)組,成員是匹配成功的子字符串,否則返回null。
var reg = /a/g;
var str = 'abc_abc_abc'
var r1 = reg.exec(str);
r1 // ["a"]
r1.index // 0
reg.lastIndex // 1
var r2 = reg.exec(str);
r2 // ["a"]
r2.index // 4
reg.lastIndex // 5
var r3 = reg.exec(str);
r3 // ["a"]
r3.index // 8
reg.lastIndex // 9
var r4 = reg.exec(str);
r4 // null
reg.lastIndex // 0
利用g修飾符允許多次匹配的特點,可以用一個循環(huán)完成全部匹配。
var reg = /a/g;
var str = 'abc_abc_abc'
while(true) {
var match = reg.exec(str);
if (!match) break;
console.log('#' + match.index + ':' + match[0]);
}
// #0:a
// #4:a
// #8:a
3 RegExp之string
match,search,replace, split
如果正則表達(dá)式帶有g(shù)修飾符,則該方法與正則對象的exec方法行為不同,會一次性返回所有匹配成功的結(jié)果。
var s = 'abba';
var r = /a/g;
s.match(r) // ["a", "a"]
r.exec(s) // ["a"]
字符串對象的search方法,返回第一個滿足條件的匹配結(jié)果在整個字符串中的位置。如果沒有任何匹配,則返回-1。
split用法:
// 非正則分隔
'a, b,c, d'.split(',')
// [ 'a', ' b', 'c', ' d' ]
// 正則分隔,去除多余的空格
'a, b,c, d'.split(/, */)
// [ 'a', 'b', 'c', 'd' ]
// 指定返回數(shù)組的最大成員
'a, b,c, d'.split(/, */, 2)
[ 'a', 'b' ]
// 例一
'aaa*a*'.split(/a*/)
// [ '', '*', '*' ]
// 例二
'aaa**a*'.split(/a*/)
// ["", "*", "*", "*"]
4 RegExp之字面量字符和元字符
點字符(.)匹配除回車(\r)、換行(\n) 、行分隔符(\u2028)和段分隔符(\u2029)以外的所有字符。
// 從開始位置到結(jié)束位置只有test
/^test$/.test('test') // true
/^test$/.test('test test') // false
正則表達(dá)式中,需要反斜杠轉(zhuǎn)義的,一共有12個字符:^、.、[、$、(、)、|、*、+、?、{和\。
/[^abc]/.test('hello world') // true
/[^abc]/.test('bbc') // false
如果方括號內(nèi)沒有其他字符,即只有[^],就表示匹配一切字符,其中包括換行符。相比之下,點號作為元字符(.)是不包括換行符的。
/a-z/.test('b') // false
/[a-z]/.test('b') // true
只有當(dāng)連字號用在方括號之中,才表示連續(xù)的字符序列。
\d 匹配0-9之間的任一數(shù)字,相當(dāng)于[0-9]。
\D 匹配所有0-9以外的字符,相當(dāng)于[^0-9]。
\w 匹配任意的字母、數(shù)字和下劃線,相當(dāng)于[A-Za-z0-9_]。
\W 除所有字母、數(shù)字和下劃線以外的字符,相當(dāng)于[^A-Za-z0-9_]。
\s 匹配空格(包括換行符、制表符、空格符等),相等于[ \t\r\n\v\f]。
\S 匹配非空格的字符,相當(dāng)于[^ \t\r\n\v\f]。