鍍金池/ 問答/Java  HTML/ JS正則表達(dá)式,請大家?guī)臀铱纯礊樯跺e(cuò)誤?

JS正則表達(dá)式,請大家?guī)臀铱纯礊樯跺e(cuò)誤?

寫了一個(gè)匹配郵箱的正則表達(dá)式,不知道為啥在@后面為字母時(shí)錯(cuò)誤,為數(shù)字時(shí)正確。
w應(yīng)該既能匹配數(shù)字也能匹配字母呀。

clipboard.png

回答
編輯回答
怪痞

后面不要加g,全局匹配會(huì)保留上一次匹配到的index,并且下一次從index才開始匹配,會(huì)導(dǎo)致間歇性錯(cuò)誤。

補(bǔ)充:
第一個(gè)匹配成功后的表達(dá)式對象截圖
clipboard.png

lastIndex的文檔說明

2017年9月6日 09:51
編輯回答
大濕胸
String#search
String#split
String#match
String#replace
RegExp#test
RegExp#exec

字符串的四個(gè)方法,每次匹配時(shí),都是從0開始的,即lastIndex屬性始終不變。

而正則實(shí)例的兩個(gè)方法exec、test,當(dāng)正則是全局匹配時(shí),每一次匹配完成后,都會(huì)修改lastIndex。下面讓我們以test為例,看看你是否會(huì)迷糊:

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,因?yàn)檫@一次嘗試匹配,開始從下標(biāo)lastIndex3位置處開始查找,自然就找不到了。

如果沒有g,自然都是從字符串第0個(gè)字符處開始嘗試匹配:

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

摘抄自:老姚的文章正則表達(dá)式編程-2.4 修飾符g,對exex和test的影響
希望對你有幫助。

2018年4月28日 05:55