解決js相同的正則多次調(diào)用test()返回的值卻不同的問題
代碼是這樣的:
var reg = /^1[345678][0-9]{9}$/g;
console.log(reg.test(15328044636));
console.log(reg.test(15328044636));
會發(fā)現(xiàn)控制臺打印的數(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()返回的值卻不同的問題就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
JavaScript實(shí)現(xiàn)QueryString獲取GET參數(shù)的方法
本文為大家詳細(xì)介紹下如何通過JavaScript實(shí)現(xiàn)QueryString獲取GET參數(shù),具體實(shí)現(xiàn)如下,感興趣的朋友可以參考下哈,希望對大家有所幫助2013-07-07
基于JavaScript實(shí)現(xiàn)圖片裁剪功能
在前端開發(fā)中,當(dāng)遇到圖片或頭像上傳等功能時(shí),有尺寸分辨率限制的話,就需要用到圖片的裁剪功能。本文為大家介紹了JavaScript實(shí)現(xiàn)圖片裁剪功能的示例代碼,希望對大家有所幫助2023-02-02
JavaScript arguments.callee作用及替換方案詳解
這篇文章主要介紹了JavaScript arguments.callee作用及替換方案詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09
JS數(shù)組reduce你不得不知道的25個(gè)高級用法
reduce作為ES5新增的常規(guī)數(shù)組方法之一,對比forEach 、filter和map,在實(shí)際使用上好像有些被忽略,下面這篇文章主要給大家介紹了關(guān)于JS數(shù)組reduce你不得不知道的25個(gè)高級用法,需要的朋友可以參考下2021-06-06

