解決js相同的正則多次調用test()返回的值卻不同的問題
更新時間:2018年10月10日 08:59:02 作者:專注前端30年
今天小編就為大家分享一篇解決js相同的正則多次調用test()返回的值卻不同的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
代碼是這樣的:
var reg = /^1[345678][0-9]{9}$/g; console.log(reg.test(15328044636)); console.log(reg.test(15328044636));
會發(fā)現控制臺打印的數據卻是:
true false
問題原因
這是因為正則reg的g屬性,設置的全局匹配。RegExp有一個lastIndex屬性,來保存索引開始位置。
上面的問題,第一次調用的lastIndex值為0,到了第二次調用,值變成了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去掉,關閉全局匹配。
第二種就是在每次匹配之前將lastIndex的值設置為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相同的正則多次調用test()返回的值卻不同的問題就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
JavaScript中實現new的兩種方式引發(fā)的探究
眾所周知JS中new的作用是通過構造函數來創(chuàng)建一個實例對象,這篇文章主要給大家介紹了關于JavaScript中實現new的兩種方式引發(fā)的相關資料,需要的朋友們下面隨著小編來一起學習學習吧2021-05-05借助FileReader實現將文件編碼為Base64后通過AJAX上傳
這篇文章主要介紹了借助FileReader實現將文件編碼為Base64后通過AJAX上傳的方法,包括后端對文件數據解碼并保存的PHP代碼,需要的朋友可以參考下2015-12-12