您的位置:首页 > Web前端 > JavaScript

JS正则表达式 ,reg.test()时,慎重全局查找/.../g属性

2017-09-14 18:07 274 查看
正则表达式 ,test()慎重全局查找/…/g属性

先看下最开始的代码

eg:
var reg = /\./g;
var balance = '100';
reg.test(balance) ? balance : balance += '.00';


是因为在接收到后台数据,由于第一次,再测试数据中,后台给的全是整数,所以我加g进行判断,全部正确,并没有发现错误;

eg:
var reg = /\./g;
var balance = '0.2';
reg.test(balance) ? balance : balance += '.00';


第二次后台给的数据,是包含小数的,错误就出现了

结果显示的是

0.2

0.2.00

........//循环上面两次结果


原因就是因为
reg=/\./g
正则表达式里加入了g全局查找。

具体原因论坛里有人已经分析过了,我就不详细说明了,贴上别人的连接[]http://blog.csdn.net/leolu007/article/details/8576490)]

但是,我想就我这次错误总结一下我的理解,希望我的理解能帮助到你。

加上全局g.会导致下一次的判断,会根据上一次的位置查找,不论reg.test() 括号里内容是否变化,

例如:

var reg=/\./g
reg.test(0.2)//true
reg.test(0.2)//false,因为接着上一次的index位置查找,没找到正则中的内容,所以是false,false以后,index会自动归0
reg.test(0.2)//true
reg.test(123.4)//false 注意,此时已经换了验证内容,但依然会是false


写到这里,不知道各位有没有点想法,这是我发现论坛里有没写到的地方,可能也许是还没找到写过人的帖子。。。。。

就是验证内容不管相同不相同,结果都是一次true,一次false

所以我想到了reg加g全局验证下,记录的index位置,是根据正则规则来定的,举个例子说明

var reg=/\./g;
var ret=/\./g;
reg.test(0.2)//true
ret.test(0.2)//true;


所以,加g全局判断下,index的记录位置,是根据正则表达式来定的,不同表达式,初始位置都是0,即使验证同一段信息,不同正则表达式,再全局属性下,第一次验证结果也都是true。

发现了没有,所以index是和正则表达式规则息息相关的,和验证内容是没关系的。

当然,用同一正则表达式判断不同内容,还是要慎用g。我只是把自己理解到的,论坛里可能没人提到的写下来,对我自己也是个提醒。希望可以帮助大家。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息