返回意外结果的JavaScript Regexp.test

返回意外结果的JavaScript Regexp.test,javascript,regex,Javascript,Regex,这可能是我做错了或理解不正确的事情,但我试图找出为什么在下面的测试中“teest”没有返回true。在以下情况下,它似乎应该返回真值: var r = RegExp("te", "gi"); r.test("test"); // true r.test("teest"); // false r.test("teset"); // true var r = RegExp("tee", "gi"); r.test("teesting"); // true r.test("teeest"); // t

这可能是我做错了或理解不正确的事情,但我试图找出为什么在下面的测试中“teest”没有返回true。在以下情况下,它似乎应该返回真值:

var r = RegExp("te", "gi");
r.test("test");
// true
r.test("teest");
// false
r.test("teset");
// true
var r = RegExp("tee", "gi");
r.test("teesting");
// true
r.test("teeest");
// true

在评论中,有人指出我需要删除g。这非常有效。

听起来您找到了解决方案,但以防万一:当您使用全局选项(g)时,
r.lastIndex
在第一次
测试()后更新为
2
。以下
test()
检查从索引2开始的输入字符串,该字符串与正则表达式不匹配:

var r = RegExp('te', 'gi');
// r.lastIndex == 0
r.test('test');
// true, r.lastIndex == 2
r.test('test');
// false, r.lastIndex == 0

正如您已经发现的,您可以简单地删除全局选项。您还可以重置
r.lastIndex
的值,或者可以在每个输入字符串上循环,直到
test()
返回false。

哪个浏览器?此处返回true:为什么将
g
标志与
.test
一起使用?毫无意义。它要么在那里,要么不在那里,不管它是否在那里多次。删除
g
,它就会工作。我使用chrome和appcelerator,删除g就工作了。谢谢