一个JS正则的问题 求解答

var re = /^\d{6,}$/g;
var num1 = 6228210660042337762;
re.test(num1)
true
var num2 = 6228210660042337765;
re.test(num2)
false
var num2 = 6228210660042337765;
re.test(num2)
true
var num2 = 6228210660042337765;
re.test(num2)
false
var num2 = 6228210660042337765;
re.test(num2)
true
var num2 = 6228210660042337765;
re.test(num2)
false
var num2 = 6228210660042337765;
console.log(re.test(num2))
VM4611:2 true
undefined
var num2 = 6228210660042337765;
console.log(re.test(num2))
VM4612:2 false
undefined
var num2 = 6228210660042337765;
console.log(re.test(num2))
VM4613:2 true
undefined
var num2 = 6228210660042337765;
console.log(re.test(num2))
VM4614:2 false

上面是谷歌控制台真实显示的内容
不知道是不是我正则写法问题
一会可以匹配 一会不能匹配 很奇怪

阅读 2.6k
3 个回答

因为g全局匹配会记录上一次的内容的index为lastIndex,第二次匹配会从lastIndex开始,所以这里不要用全局匹配就行。
或是每次更新正则表达式。

这里面,在test方法内部会有一个值终于记录上一次匹配到的内容的索引。每次匹配会从这个值记录的索引开始,所以就会出现你的这种情况。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题