有人可以解释为什么将此正则表达式保存到变量会产生交替的true和false值,但是每次使用literal都会生成true吗?我错过了一些明显的东西吗?我当然不是正则表达式专家,但这对我来说似乎很奇怪。
var exp = /[\^~\\><\|"]/g;
exp.test('<abc'); // true
exp.test('<abc'); // false
exp.test('<abc'); // true
exp.test('<abc'); // false
/[\^~\\><\|"]/g.test('<abc'); // true
/[\^~\\><\|"]/g.test('<abc'); // true
/[\^~\\><\|"]/g.test('<abc'); // true
/[\^~\\><\|"]/g.test('<abc'); // true
答案 0 :(得分:4)
这是因为正则表达式对象保存它们的状态,所以当你在同一个对象上再次调用 时,它会尝试查找下一个匹配并失败。
来自docs:
在同一个全局正则表达式实例上多次调用的测试将超过上一个匹配。
在上一个示例中,您每次都要创建一个 new 正则表达式,因此每次都匹配。