2013-10-18 59 views
2

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

考虑下面的JavaScript变量

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

我做了以下内容:

alert(regexo.test('<span class="outer">')); // true 
alert(regexo.test('<span class="inner">')); // false 
alert(regexo.test('<span class="inner">')); // true 

我用同样奇怪的测试结果在Firefox 24.0和IE8。

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

回答

11

这是因为您使用g标志。它将regexp对象变成一个迭代器,其状态随每次调用而改变。

您不需要这里的g标志,所以只是将其删除:

var regexo = new RegExp('^'+opener+'$'); 
+0

就是这样,你让我很快乐! – fluminis

+0

+1'g'用作全局修饰符,删除它可能无法满足任何条件。不知道请纠正我,如果我错了 – Praveen

+2

@ user1671639我很抱歉,但我不明白你的意见,所以我不知道你是否正确。但要清楚的是,我认为当你使用'test'函数时,甚至没有理由使用这个标志。 –