1 回答

TA貢獻2080條經(jīng)驗 獲得超4個贊
String#search
String#split
String#match
String#replace
RegExp#test
RegExp#exec
字符串的四個方法,每次匹配時,都是從0開始的,即lastIndex屬性始終不變。
而正則實例的兩個方法exec、test,當正則是全局匹配時,每一次匹配完成后,都會修改lastIndex。下面讓我們以test為例,看看你是否會迷糊:
var regex = /a/g;
console.log( regex.test("a"), regex.lastIndex );
console.log( regex.test("aba"), regex.lastIndex );
console.log( regex.test("ababc"), regex.lastIndex );
// => true 1
// => true 3
// => false 0
注意上面代碼中的第三次調(diào)用test,因為這一次嘗試匹配,開始從下標lastIndex即3位置處開始查找,自然就找不到了。
如果沒有g(shù),自然都是從字符串第0個字符處開始嘗試匹配:
var regex = /a/;
console.log( regex.test("a"), regex.lastIndex );
console.log( regex.test("aba"), regex.lastIndex );
console.log( regex.test("ababc"), regex.lastIndex );
// => true 0
// => true 0
// => true 0
摘抄自:老姚的文章正則表達式編程-2.4 修飾符g,對exex和test的影響
希望對你有幫助。
添加回答
舉報