正则表达式测试函数不会返回相同的依赖引号

JuS*_*chz 6 javascript regex string

我有一个奇怪的情况与javascript中的正则表达式:

var re = /[^\s]+(?:\s+|$)/g;
re.test('foo'); // return true
re.test("foo"); // return false
Run Code Online (Sandbox Code Playgroud)

正则表达式类型是否敏感?我的第一个目标是提取字符串的所有单词(由一个或多个空格分隔).

谢谢你的帮助.

朱利安

And*_*ark 10

gJavascript正则表达式上使用该标志时,它将跟踪找到最后一个匹配的位置,并在您下次尝试查找匹配时从该索引开始搜索.

在两个re.test()电话之间,看看re.lastIndex我在说什么.

例如:

var re = /[^\s]+(?:\s+|$)/g;
re.test('foo'); // return true
re.lastIndex;   // 3
re.test("foo"); // return false
Run Code Online (Sandbox Code Playgroud)

您会注意到您使用的引号类型无关紧要,re.test('foo'); re.test('foo');具有相同的行为.

如果您希望正则表达式重新开始,您可以从正则表达式中删除全局标志,或者在每次尝试查找匹配项后设置re.lastIndex0,例如:

var re = /[^\s]+(?:\s+|$)/g;
re.test('foo'); // return true
re.lastIndex = 0;
re.test("foo"); // return true
Run Code Online (Sandbox Code Playgroud)

可以解释Blender在注释中注明的交替,因为当匹配失败时lastIndex自动设置为交替0,因此失败后的下一次尝试将成功.