帮忙看下正则表达式

var reg = /^\d{1}\w{3,10}$/g;
reg.test('12345')
//true
reg.test('123_45')
//false 为啥是 false
reg.test('12_3_45')
//true //这为啥又 true 了
reg.test('12_345')
//false 为啥是 false
阅读 2.6k
3 个回答

天天有人问这个问题

把最后的g去掉

和正则没什么关系。

主要是你用的g全局搜索,而test又具有记忆特性,你试试吧顺序换一下结果就会不同。

具体看这里test

JS权威指南第6版书上原话,我给你念一念:

如果让一个带有修饰符g的正则表达式对多个字符串执行exec()或test(),要么在每个字符串中找出所有的匹配以 便将lastIndex自动重置为零,要么显示将lastIndex手动设置为0(当最后一次检索失败时需要手动设置lastIndex)。

说来也巧,我刚看完这个没太理解,你这问题一问,这段话读明白了...

图片描述这是没有加g的,没问题

图片描述这是加了g的,可以看出来并不是每次执行为了lastIndex都是0,也就是问题所在了

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