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

来源:互联网 发布:解压缩工具 for mac 编辑:程序博客网 时间:2024/06/05 04:22

正则表达式 ,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=/\./greg.test(0.2)//truereg.test(0.2)//false,因为接着上一次的index位置查找,没找到正则中的内容,所以是falsefalse以后,index会自动归0reg.test(0.2)//truereg.test(123.4)//false 注意,此时已经换了验证内容,但依然会是false

写到这里,不知道各位有没有点想法,这是我发现论坛里有没写到的地方,可能也许是还没找到写过人的帖子。。。。。
就是验证内容不管相同不相同,结果都是一次true,一次false

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

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

所以,加g全局判断下,index的记录位置,是根据正则表达式来定的,不同表达式,初始位置都是0,即使验证同一段信息,不同正则表达式,再全局属性下,第一次验证结果也都是true。
发现了没有,所以index是和正则表达式规则息息相关的,和验证内容是没关系的。
当然,用同一正则表达式判断不同内容,还是要慎用g。我只是把自己理解到的,论坛里可能没人提到的写下来,对我自己也是个提醒。希望可以帮助大家。

原创粉丝点击