为什么RegExp.test()不一致?

flu*_*nis 2 javascript regex

我不明白为什么RegExp.test()每次调用它时javascript 方法都不会返回相同的结果.

给出以下javascript变量

var opener = '<span[^>]*>';
var regexo = new RegExp('^'+opener+'$', "g");
Run Code Online (Sandbox Code Playgroud)

我做以下事情:

alert(regexo.test('<span class="outer">')); // true
alert(regexo.test('<span class="inner">')); // false
alert(regexo.test('<span class="inner">')); // true
Run Code Online (Sandbox Code Playgroud)

我在Firefox 24.0和IE8中测试了它同样奇怪的结果.

为什么结果true, false, true而不是true, true, true

Den*_*ret 11

那是因为你使用了g旗帜.它将regexp对象转换为迭代器,其状态随每次调用而变化.

你不需要g这里的旗帜,所以只需删除它:

var regexo = new RegExp('^'+opener+'$');
Run Code Online (Sandbox Code Playgroud)

  • @ user1671639对不起,我不明白你的评论,所以我不知道你是否对.但要明确的是,当你使用`test`函数时,我认为甚至没有充分的理由使用这个标志. (2认同)