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
如果正則表達式帶有g修飾符,則每一次test方法都從上一次結束的位置開始向后匹配蚂维。
正則表達式內部會記住上一次的lastIndex屬性 。
var r = /x/g;
var s = '_x_x';
r.lastIndex = 4;
r.test(s) // false
r.lastIndex // 0
r.test(s)
帶有g修飾符時,可以通過正則對象的lastIndex屬性指定開始搜索的位置灌旧。
2 RegExp之exec
正則實例對象的exec方法,用來返回匹配結果绰筛。如果發(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
如果正則表達式帶有g修飾符,則該方法與正則對象的exec方法行為不同玻募,會一次性返回所有匹配成功的結果只损。
var s = 'abba';
var r = /a/g;
s.match(r) // ["a", "a"]
r.exec(s) // ["a"]
字符串對象的search方法,返回第一個滿足條件的匹配結果在整個字符串中的位置七咧。如果沒有任何匹配跃惫,則返回-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)以外的所有字符裹粤。
// 從開始位置到結束位置只有test
/^test$/.test('test') // true
/^test$/.test('test test') // false
正則表達式中终蒂,需要反斜杠轉義的,一共有12個字符:^遥诉、.拇泣、[、$矮锈、(霉翔、)、|苞笨、*债朵、+、?瀑凝、{和\序芦。
/[^abc]/.test('hello world') // true
/[^abc]/.test('bbc') // false
如果方括號內沒有其他字符,即只有[^]粤咪,就表示匹配一切字符谚中,其中包括換行符。相比之下寥枝,點號作為元字符(.)是不包括換行符的宪塔。
/a-z/.test('b') // false
/[a-z]/.test('b') // true
只有當連字號用在方括號之中,才表示連續(xù)的字符序列囊拜。
\d 匹配0-9之間的任一數(shù)字某筐,相當于[0-9]。
\D 匹配所有0-9以外的字符冠跷,相當于[^0-9]来吩。
\w 匹配任意的字母敢辩、數(shù)字和下劃線,相當于[A-Za-z0-9_]弟疆。
\W 除所有字母、數(shù)字和下劃線以外的字符盗冷,相當于[^A-Za-z0-9_]怠苔。
\s 匹配空格(包括換行符、制表符仪糖、空格符等)柑司,相等于[ \t\r\n\v\f]。
\S 匹配非空格的字符锅劝,相當于[^ \t\r\n\v\f]攒驰。