今天开发测试的时候碰见这么一个奇怪的问题,定义一个正则表达式,如下图
然后使用这个正则去判断不同的字符串,就会出现这种情况
可以看到图中打印出来的值,第一个则是判断之后的值,而第二个是被判断的字符串,重点是第三个值:全局匹配之后的最后索引值+1,
那么回头再来看看全局匹配的定义:
执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)。
咋一看没啥问题,是全局匹配不同字符串或者相同字符串的,找到之后就停止了。
但是再看看上面的第三个数值,也就是同一个匹配规则匹配字符串之后的lastIndex,这个索引并不会随着不同的字符串而置0重新匹配,而是会记录下来,
那么再来理解上面的定义就简单多了,同一个匹配规则在全局匹配下会一直匹配下去,直到匹配不到也就是为false时才会重置,上面那种情况因为我们设置了^与$适配符,所以从索引7的位置开始匹配就肯定会错,这是由于使用了限定适配符引起的,那么去掉这俩货又会怎样么,
事实证明了猜想,前俩个为true,而第三个为false的原因是后面的字符串从13的索引开始则是空的,所以匹配不了。
那么怎么避免这种问题呢,个人推荐的是手动将需要多次匹配的匹配规则的lastIndex手动置0,又或者不使用全局匹配,具体得看需求咯。
网友评论