在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

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

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

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

clipboard.png

回答
編輯回答
怪痞

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

補充:
第一個匹配成功后的表達式對象截圖
clipboard.png

lastIndex的文檔說明

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

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

而正則實例的兩個方法exectest,當(dāng)正則是全局匹配時,每一次匹配完成后,都會修改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,因為這一次嘗試匹配,開始從下標(biāo)lastIndex3位置處開始查找,自然就找不到了。

如果沒有g,自然都是從字符串第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的影響
希望對你有幫助。

2018年4月28日 05:55