JavaScript Regexp.test返回意外结果

时间:2013-12-14 03:21:39

标签: javascript regex

这可能是我做错了或者没有正确理解,但我想弄清楚为什么'teest'在以下测试中没有返回true。看起来它应该在以下每种情况下都返回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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

听起来你找到了解决方案,但万一你关心:当你使用全局选项(g)时,r.lastIndex在第一个2之后更新为test()。以下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。