为什么在调用.test()方法时将JavaScript正则表达式保存到变量会产生不同的结果?

时间:2014-09-11 03:34:00

标签: javascript regex

有人可以解释为什么将此正则表达式保存到变量会产生交替的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

CodePen Demo (check the console)

1 个答案:

答案 0 :(得分:4)

这是因为正则表达式对象保存它们的状态,所以当你在同一个对象上再次调用 时,它会尝试查找下一个匹配并失败。

来自docs

  

在同一个全局正则表达式实例上多次调用的测试将超过上一个匹配。

在上一个示例中,您每次都要创建一个 new 正则表达式,因此每次都匹配。