js 正則表達式用變量連續(xù)使用的問題

在js中我們可能會遇到連續(xù)用同一個正則校驗的情況,這里以校驗郵箱為例
先來一段郵箱的正則

const emailReg = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/g;

然后我們先來一個郵箱校驗

emailReg.test("1111111111@qq.com");
// => true

這么一看確實沒問題,但是如果是多個郵箱呢

const emailReg = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/g;
console.log(emailReg.test("1111111111@qq.com"));
console.log(emailReg.test("1111111111@qq.com"));
console.log(emailReg.test("1111111111@qq.com"));
console.log(emailReg.test("1111111111@qq.com"));
console.log(emailReg.test("1111111111@qq.com"));

會發(fā)現(xiàn)結果和預期不太一樣了


image.png

原因

這是因為正則表達式如果用變量的方式證明的話,連續(xù)使用時,他會從上一次匹配到的位置繼續(xù)開始,并不是從第0個位置開始匹配的,匹配不到時會返回false,索引位置重新歸0,所以第二次找不到,第三次又找到了

第一次 test("1111111111@qq.com"):匹配成功,返回 true
第二次 test("1111111111@qq.com"):因為位置已經移動,無法匹配,所以返回 false
第三次 test("1111111111@qq.com"):又回到字符串開始,匹配成功,返回 true
第四次 test("1111111111@qq.com"):位置再次移動,無法匹配,返回 false
第五次 test("1111111111@qq.com"):又回到字符串開始,匹配成功,返回 true

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容