正则表达式误用全局匹配导致的错误

正则表达式误用全局匹配导致的错误

奇怪的现象

奇怪的现象

console.log(/['"<>]/g.test('\'')); // true
console.log(/['"<>]/g.test('\'')); // true
console.log(/['"<>]/g.test('\'')); // true

var illagealReg = /['"<>]/g;
console.log(illagealReg.test('\'')); // true
console.log(illagealReg.test('\'')); // false

因为/g代表全局匹配,正则判断时内部是有一个lastIndex来记录最后匹配的位置.当重复调用的时候,会接着上次的lastIndex继续匹配,故而将导致判断出错.

解决

  1. 去掉/g,在不需要/g的情况下不要随意添加/g标识
  2. 第二次匹配前,手动将lastIndex置0,以上面的例子来说:reg.lastIndex()=0即可.
var illagealReg = /['"<>]/g;
console.log(illagealReg.lastIndex); //0
console.log(illagealReg.test('\'')); // true
console.log(illagealReg.lastIndex); //1
console.log(illagealReg.test('\'')); // false
console.log(illagealReg.lastIndex); //0

posted @ 2017-06-30 19:31  大志若愚  阅读(534)  评论(0编辑  收藏  举报