现在需要一个正则验证小数点后保留一到三位数,小数点前只能两位或一位整数的这么一个数。

正则如:

var reg = /^\d{,}\.\d{,}$/g;

验证如下:

因为我们用1.23符合规则的数据去调用test,调用的次数为奇数的时候输出true,调用的次数为偶数的时候输出false。

明明用1.23是符合的为什么还会输出false的情况呢?

经过翻阅Mozilla官网对此的解释

根据解释,我个人的理解大概是这样的,如果正则使用g标志的情况下,将会使用lastIndex这个属性,后续根据特定的参数进行匹配搜索的的时候依然会使用lastIndex,

首次匹配的时候lastIndex的值0也就是匹配的起始位置为下标0,但是你却没办法输出看到这个所谓的属性的具体值。

我们就根据官网的例子先探讨下:

第一次:从0的位置开始匹配是否存在foo,只要存在,就不在匹配了,直接输出true

第二次:从3的位置开始匹配是否存在foo,只要存在,就不在匹配了,直接输出true

第三次:从6的位置开始匹配是否存在foo,只要存在,就不在匹配了,直接输出true

第四次:从9的位置开始匹配是否存在foo,只要存在,就不在匹配了,直接输出true

如果匹配不到了lastIndex直接变为0,我们在上面的基础上继续调用三次

第一次故意让不匹配的调用输出false,此时lastIndex的值理论上0,继续按之前的方法调用,发现都都输出true了。

根据实践,本人得出如下结论:

1.在正则使用g标志,调用test方法将会使用看不见摸不着的lastIndex属性(默认:0);

2.如果匹配存在的时候,将直接返回true,lastIndex的值将改变;

3.如果匹配不存在的时候,返回false,并且lastIndex的值将变为0;

那么有解决方案吗?

因为我们每次调用test方法都是通过通过同一个正则对象来调用的,所以会共用lastIndex的情况,

我们可以使用不用正则对象相同规则的方式来调用test方法,这样就可以避免了:

javascript正则多次调用test 结果交替出现的更多相关文章

  1. 我也谈javascript正则匹配

    一.javascript 正则全局匹配 g 慎用test()方法 来个例子: var a = /^[a-z]+/gi; a.test('bb123'); //true a.lastIndex ; // ...

  2. JavaScript正则式入门

    正则式 正则表达式,又称规则表达式.(英语:Regular Expression,在代码中常简写为regex.regexp或RE),计算机科学的一个概念.正则表通常被用来检索.替换那些符合某个模式(规 ...

  3. JavaScript 正则

    元字符 预定义类 边界 ^在中括号中时,匹配非hello的 str = 'hello world' str.match(/[^hello]/g) //[" ", "w&q ...

  4. JavaScript正则常用知识总结

    一.JavaScript正则相关方法 str.match(regexp)与regexp.exec(str)功能类似. str.search(regexp)与regexp.test(str)功能类似. ...

  5. JavaScript正则实战

    *:first-child { margin-top: 0 !important; } .markdown-body>*:last-child { margin-bottom: 0 !impor ...

  6. ASP.net关于C#代码与javaScript函数的相互调用

    C#代码与javaScript函数的相互调用 问:1.如何在JavaScript访问C#函数?2.如何在JavaScript访问C#变量?3.如何在C#中访问JavaScript的已有变量?4.如何在 ...

  7. 【Android进阶】Android程序与JavaScript之间的简单调用

    本篇将讲解一个简单的Android与JavaScript之间的简单调用的小程序 效果图 工程结构 HTMLActivity.java代码 package com.example.javatojs; i ...

  8. JavaScript函数的各种调用模式

    函数是JavaScript世界里的第一公民,换句话来说,就是我们如果可以精通JavaScript函数的使用,那么对JavaScript的运用可以更游刃有余了.熟悉JavaScript的人应该都知道,同 ...

  9. JavaScript中的尾调用优化

    文章来源自:http://www.zhufengpeixun.com/qianduanjishuziliao/javaScriptzhuanti/2017-08-08/768.html JavaScr ...

随机推荐

  1. 使用WinDBG调试查看C#内存转储文件

    有时候我们想查看一个正在运行的程序内存中的数据,可以在任务管理器将内存状态保存为转储文件,并使用WinDBG验证,这里我们来试试: 0.安装WinDBG 1.首先写个代码用来测试 一个class pu ...

  2. win10 uwp 获得焦点改变

    本文讲的是当我们应用失去焦点时,我们获得事件,当我们应用获得焦点,同样获得事件.同时,在应用不可以见时,我们也可以获得. 上面一张图,开始是应用启动,获得焦点,应用显示.然后我们打开另一个应用,切换, ...

  3. Windows历史

    1983年11月:Microsoft宣布Windows的第一个版本:以字符为基础 的窗口系统: 1985年11月:Windows1.0: 1990年5月:Windows 3.0(成功版本),16位OS ...

  4. php实现伪静态的方法

    mod_rewrite是Apache的一个非常强大的功能,它可以实现伪静态页面.下面我详细说说它的使用方法 1.检测Apache是否支持mod_rewrite 通过php提供的phpinfo()函数查 ...

  5. Java IO(Properties/对象序列化/打印流/commons-io)

    Java IO(Properties/对象序列化/打印流/commons-io) Properties Properties 类表示了一个持久的属性集.Properties 可保存在流中或从流中加载. ...

  6. “华尔街之狼”:ICO是“史上最大骗局”

    勘探船进村的那个夏季,父亲从城里带回了那把手电.手电的金属外壳镀了镍,看上去和摸起来一样冰凉.父亲进城以前采了两筐枸杞子,他用它们换回了那把锃亮的东西.父亲一个人哼着<十八摸>上路,鲜红透 ...

  7. 【转】认识物理I/O构件- 主机I/O总线

    在数据离开系统内存总线后,它通常传输到另一条总线,即主机I/O总线.在今天的产品中,最常见的主机I/O总线是PCI总线,但也存在着几种其他的总线,如S -总线,EIS A总线及VME总线.主机I/O总 ...

  8. JavaBean编辑器的简单介绍

    引言 Sun所指定的JavaBean规范很大程度上是为IDE准备的--它让IDE能够以可视化的方式设置JavaBean的属性.如果在IDE中开发一个可视化的应用程序,则需要通过属性设置的方式对组成应用 ...

  9. 小技巧:Oracle:sqlplus 显示行列字符数

    遇到这种情况可以判断:行显示字符数不够,可以增加行显示字符数 01.可以当前会话HR@ACE >set line 400; 02.上面的方法其它会话不生效,懒不想每次设置怎么办? Oracle: ...

  10. python matplotlib 图表局部放大

    import matplotlib.pyplot as plt from mpl_toolkits.axes_grid1.inset_locator import zoomed_inset_axes ...