javascript正则多次调用test 结果交替出现
现在需要一个正则验证小数点后保留一到三位数,小数点前只能两位或一位整数的这么一个数。
正则如:
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 结果交替出现的更多相关文章
- 我也谈javascript正则匹配
一.javascript 正则全局匹配 g 慎用test()方法 来个例子: var a = /^[a-z]+/gi; a.test('bb123'); //true a.lastIndex ; // ...
- JavaScript正则式入门
正则式 正则表达式,又称规则表达式.(英语:Regular Expression,在代码中常简写为regex.regexp或RE),计算机科学的一个概念.正则表通常被用来检索.替换那些符合某个模式(规 ...
- JavaScript 正则
元字符 预定义类 边界 ^在中括号中时,匹配非hello的 str = 'hello world' str.match(/[^hello]/g) //[" ", "w&q ...
- JavaScript正则常用知识总结
一.JavaScript正则相关方法 str.match(regexp)与regexp.exec(str)功能类似. str.search(regexp)与regexp.test(str)功能类似. ...
- JavaScript正则实战
*:first-child { margin-top: 0 !important; } .markdown-body>*:last-child { margin-bottom: 0 !impor ...
- ASP.net关于C#代码与javaScript函数的相互调用
C#代码与javaScript函数的相互调用 问:1.如何在JavaScript访问C#函数?2.如何在JavaScript访问C#变量?3.如何在C#中访问JavaScript的已有变量?4.如何在 ...
- 【Android进阶】Android程序与JavaScript之间的简单调用
本篇将讲解一个简单的Android与JavaScript之间的简单调用的小程序 效果图 工程结构 HTMLActivity.java代码 package com.example.javatojs; i ...
- JavaScript函数的各种调用模式
函数是JavaScript世界里的第一公民,换句话来说,就是我们如果可以精通JavaScript函数的使用,那么对JavaScript的运用可以更游刃有余了.熟悉JavaScript的人应该都知道,同 ...
- JavaScript中的尾调用优化
文章来源自:http://www.zhufengpeixun.com/qianduanjishuziliao/javaScriptzhuanti/2017-08-08/768.html JavaScr ...
随机推荐
- ImageSharp一个专注于NetCore平台图像处理的开源项目
今天大家分享的是一个专注于NetCore平台图像处理的开源项目,老实说为这篇文章取名字想了5分钟,可能是词穷亦或是想更好的表达出这款开源项目的作用:这个项目在图像处理方面有很多功能,如:缩放,裁剪,绘 ...
- es6零基础学习之构建脚本(二)
编译器打开你的es6项目 首先:创建我们的第一个脚本,tasks/util/args.js 在文件里面要先引入一个包,处理命令行参数 import yargs from 'yargs'; / ...
- 如何在Windows系统中配置Mysql群集(Mysql Cluster)
MySQL群集技术在分布式系统中为MySQL数据提供了冗余特性,增强了安全性,使得单个MySQL服务器故障不会对系统产生巨大的负面效应,系统的稳定性得到保障. Mysql群集(Cluster)简介 M ...
- zookeeper curator选主(Leader)
在分布式系统设计中,选主是一个常见的场景.选主是一个这样的过程,通过选主,主节点被选择出来控制其他节点或者是分配任务. 选主算法要满足的几个特征: 1)各个节点均衡的获得成为主节点的权利,一旦主节点被 ...
- [置顶]
一个demo学会c#
学习了c#4.5高级编程这本书,自己喜欢边学边总结边写demo,所以写了这篇文章,包含了大部分的c#编程知识.让你一个demo掌握c#编程,如果有问题可以留言. 此demo主要包括五个文件:Stude ...
- jquery层次选择器:空格 > next + nextAll ~ siblings
全栈工程师开发手册 (作者:栾鹏) jquery系列教程1-选择器全解 jquery层次选择器 jquery层次选择器,包括空格.>.next.+.nextAll.~.siblings等函数或表 ...
- Android架构: MVC 新浪微博
由于项目的需要,最近研究了一下需要连接网络项目的MVC架构,参考了一下一个新浪微博的开发架构 http://www.open-open.com/lib/view/open1345524526767.h ...
- web 导出 csv
public void ProcessRequest(HttpContext context) { //DownloadFile("教程.csv" ...
- win10 uwp 进度条 Marquez
本文将告诉大家,如何做一个带文字的进度条,这个进度条可以用在游戏,现在我做的挂机游戏就使用了他. 如何做上图的效果,实际需要的是两个控件,一个是显示文字 的 TextBlock 一个是进度条. 那么如 ...
- Java设计模式(四)——再谈观察者模式
在本系列的上一篇文章中,我们讨论了JDK对于观察者模式的一套实现.今天我们将要从另一个角度来探索Tomcat中是如何利用观察者模式加载各个组件.不过今天的任务不是解释Tomcat,所以我会单独把重点抽 ...