解決js相同的正則多次調(diào)用test()返回的值卻不同的問題
代碼是這樣的:
var reg = /^1[345678][0-9]{9}$/g; console.log(reg.test(15328044636)); console.log(reg.test(15328044636));
會(huì)發(fā)現(xiàn)控制臺(tái)打印的數(shù)據(jù)卻是:
true false
問題原因
這是因?yàn)檎齽treg的g屬性,設(shè)置的全局匹配。RegExp有一個(gè)lastIndex屬性,來保存索引開始位置。
上面的問題,第一次調(diào)用的lastIndex值為0,到了第二次調(diào)用,值變成了11。
var reg = /^1[345678][0-9]{9}$/g; console.log(reg.lastIndex, reg.test(15328044636)); console.log(reg.lastIndex, reg.test(15328044636)); //打印的值 0 true 11 false
解決方案
第一種方案是將g去掉,關(guān)閉全局匹配。
第二種就是在每次匹配之前將lastIndex的值設(shè)置為0。
var reg = /^1[345678][0-9]{9}$/g; console.log(reg.lastIndex, reg.test(15328044636)); reg.lastIndex = 0; console.log(reg.lastIndex, reg.test(15328044636)); //打印的值 0 true 0 true
以上這篇解決js相同的正則多次調(diào)用test()返回的值卻不同的問題就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
點(diǎn)擊標(biāo)簽切換和自動(dòng)切換DIV選項(xiàng)卡
點(diǎn)擊標(biāo)簽切換DIV的效果,在很多地方都有見到過,而且實(shí)現(xiàn)的方法有很多,本例介紹的這個(gè)可以切換和自動(dòng)切換DIV選項(xiàng)卡2014-08-08JavaScript中實(shí)現(xiàn)new的兩種方式引發(fā)的探究
眾所周知JS中new的作用是通過構(gòu)造函數(shù)來創(chuàng)建一個(gè)實(shí)例對(duì)象,這篇文章主要給大家介紹了關(guān)于JavaScript中實(shí)現(xiàn)new的兩種方式引發(fā)的相關(guān)資料,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-05-05學(xué)習(xí)javascript,實(shí)現(xiàn)插入排序?qū)崿F(xiàn)代碼
首先新建一個(gè)空列表,用于保存已排序的有序數(shù)列(我們稱之為"有序列表")。從原數(shù)列中取出一個(gè)數(shù),將其插入"有序列表"中,使其仍舊保持有序狀態(tài)。2011-07-07值得分享的輕量級(jí)Bootstrap Table表格插件
這篇文章為大家分享了輕量級(jí)Bootstrap Table表格插件,以表格的形式顯示的數(shù)據(jù),支持單選,復(fù)選框,排序,分頁,顯示/隱藏列等操作,感興趣的小伙伴們可以參考一下2016-05-05JS實(shí)現(xiàn)從網(wǎng)頁頂部掉下彈出層效果的方法
這篇文章主要介紹了JS實(shí)現(xiàn)從網(wǎng)頁頂部掉下彈出層效果的方法,實(shí)例分析了javascript創(chuàng)建彈出窗口及窗口掉落與抖動(dòng)效果實(shí)現(xiàn)方法,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-08-08借助FileReader實(shí)現(xiàn)將文件編碼為Base64后通過AJAX上傳
這篇文章主要介紹了借助FileReader實(shí)現(xiàn)將文件編碼為Base64后通過AJAX上傳的方法,包括后端對(duì)文件數(shù)據(jù)解碼并保存的PHP代碼,需要的朋友可以參考下2015-12-12