为了账号安全,请及时绑定邮箱和手机立即绑定

正则表达式test方法的疑问

正则表达式test方法的疑问

MM们 2019-02-12 12:27:04
var exg = /\d/g;result = exg.test("3");console.log(result);我打印这个结果发现奇数次是true,偶数次是false
查看完整描述

1 回答

?
函数式编程

TA贡献1807条经验 获得超9个赞

g(global)搞的鬼。去掉 g 就可以了。

var exp = /\d/;

如果你想知道为什么,那么继续。

如果正则表达式使用 g 标注,那么它表示全局检索,并且会添加一个属性 lastIndex 到表达式对象,表示下一次检索的开始位置,数据类型为整型,初始值为 0,可读可写

相关规则如下:

  1. test 从待检测字符串的 lastIndex 位置开始检索。如果匹配成功,则 lastIndex 更新为匹配到子字符串的起始位置。如果匹配失败,更新为 0。

  2. 如果 lastIndex 大于字符串长度,则 test 始终失败。(这条没什么用)

因为第一次 test 成功后 lastIndex 更新为 1,所以第二次 test 失败,然后 lastIndex 重置为 0, 第三次成功, 第四次失败。子子孙孙无穷尽。

完。


查看完整回答
反对 回复 2019-02-13
  • 1 回答
  • 0 关注
  • 393 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信