对于JavaScript同样的正则表达式多次执行的结果不一致分析

正则表达式的基础内容我就不在此进行赘述,不懂的小伙伴们请自行Google。废话不多说,直接上正题:

我现在要验证一个10以内(包括10)的数字,最多保留2位有效数字,但是不能以0打头,可以是0.00。

那么:^((10)|[0-9])(\.\d{1,2})?$

我们到图形化正则表达式的网站上测试一下。

https://regexper.com/,在此把链接贴出来,大家可以自行测试。

图形化工具告诉我们,我们的正则表达式可以匹配10或者0-9的一个数字再加上可能出现的小数点加有效数字。

 我在此直接把我在控制台中的测试结果打出来:

这就要说说有g跟没有g的区别了,g代表全局搜索,js引擎在匹配的时候,会记录上一次匹配的位置,这个参数叫lastIndex,第一次的时候lastIndex为0,当有匹配的时候,就记住第一次匹配的位置。也就是说,你以为你验证的是一个数字,而js引擎看到的字符串模板可能就是乱七八糟的了(至于这个lastIndex,有兴趣的同学请移步Google) 。而对于不带全局搜索的正则表达式,它的lastIndex一直是0,这样就避免了同一个正则,执行的次数不同结果不同。

那么,最后我们回到开发场景:

现在,我有一个input框,我需要用户输入一个10以内的数字,最多保留2位有效数字,而对应的正则大体(有的同学写出来的不一致)应该是: /^((10)|[0-9])(\.\d{1,2})$/ 

结语: 一个小坑,化解了我很久的困惑,希望能帮到大家。

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值