Javascript 問題汇总(不定期更新)【一】

为什么JavaScript中正则表达式的test方法会出错?

http://fdream.net/blog/article/672.aspx 

 

var reg = /[\d]{1,2}:[\d]{1,2}\s*-\s*[\d]{1,2}:[\d]{1,2}/gi; 
reg.test("08:00-10:00");//true
reg.test("08:00-10:00");//false

 

何解第二次会为false呢;

其实仔细看一下,那个正则表达式多了个全局选项“g”,去掉就好了。

可是为什么有“g”就会出错呢?

原因其实很简单,当一个模式具有全局选项时,和exec一样,每次test都会保留上次匹配的位置——即lastIndex。很显然,当第一次匹配之后,第二次匹配时的lastIndex已经到了字符串末尾,尽管这个时候字符串已经是一个新的字符串了,但是这个lastIndex的位置并没有重新初始化,所以会从末尾开始匹配——当然会匹配失败了。

解决方案有两种:

  • 去掉正则表达式后面的g;
  • 每次完成匹配之后重置模式的lastIndex属性;(即例中的reg.lastIndex=0)

 

posted @ 2011-11-08 10:56  BePast  阅读(207)  评论(0编辑  收藏  举报