我在 javascript 中使用正则表达式有一个奇怪的情况:
var re = /[^\s]+(?:\s+|$)/g;
re.test('foo'); // return true
re.test("foo"); // return false
正则表达式类型是否敏感?我的第一个目标是提取字符串的所有单词(由一个或多个空格分隔)。
谢谢你的帮助。
朱利安
我在 javascript 中使用正则表达式有一个奇怪的情况:
var re = /[^\s]+(?:\s+|$)/g;
re.test('foo'); // return true
re.test("foo"); // return false
正则表达式类型是否敏感?我的第一个目标是提取字符串的所有单词(由一个或多个空格分隔)。
谢谢你的帮助。
朱利安
在 Javascript 正则表达式上使用g
标志时,它将跟踪找到最后一个匹配项的位置,并在您下次尝试查找匹配项时从该索引开始搜索。
在这两个re.test()
电话之间,看看re.lastIndex
我在说什么。
例如:
var re = /[^\s]+(?:\s+|$)/g;
re.test('foo'); // return true
re.lastIndex; // 3
re.test("foo"); // return false
您会注意到您使用的引号类型无关紧要,re.test('foo'); re.test('foo');
将具有相同的行为。
如果您希望正则表达式重新开始,您可以从您的正则表达式中删除全局标志,或者在每次尝试查找匹配项后设置re.lastIndex
为,例如:0
var re = /[^\s]+(?:\s+|$)/g;
re.test('foo'); // return true
re.lastIndex = 0;
re.test("foo"); // return true
Blender在评论中注明的交替可以解释,因为匹配失败时lastIndex
自动设置0
,所以失败后的下一次尝试会成功。