varreg = /^((\d{4})+[-]+(\d{2})+[-]+(\d{2}))$/g; vardate1 ="2012-03-27"; vardate2 ="2012-03-27"; console.log(reg.test(date1)); console.log(reg.test(date2));
执行上面的js代码,你会看到控制台里面打印 true 和 false!
现在检测出是因为 reg 正则表达式定义里面最后一个(全局匹配参数) g 影响的!
那么我有个疑问,为什么这个参数会影响检测结果呢?
答案: RegExp有个lastIndex, 加了g之匹配成功不重置,匹配失败才重置, 所以导致这行第一次成功,第二次失败,如此往复
不加入g,则只返回第一个匹配,无论执行多少次均是如此,如果加入g,则第一次执行也返回第一个匹配,再执行第二个匹配,依次类推。