以下example对我来说有点混乱:
var text = "A string with 3 numbers in it ... 42 and 88.";
var number = /\b(\d+)\b/g;
var match;
while (match = number.exec(text)){
console.log("Found", match[1], "at", match.index);
}
具体来说,我不明白这是如何有一个"循环"影响。如果它一直调用match[1]
,它如何在一个字符串中运行所有匹配。对于我不知道的exec是否有某种副作用?
修改
我仍然希望得到match[1]
如何工作的答案。
match[1]
如何产生任何答案?当我自己测试这种类型的东西时,我得到undefined
,看看
> var y = /\d+/g.exec('5')
undefined
> y
[ '5', index: 0, input: '5' ]
> y[1]
undefined
这是怎么回事?不是y [0],或者在上面的情况下匹配[0]?像:
> y[0]
'5'
答案 0 :(得分:5)
RegExp对象会记住最后一个与lastIndex
属性匹配的位置。
如果正则表达式使用
"g"
标志,则可以多次使用exec()
方法在同一字符串中查找连续匹配。执行此操作时,搜索从正则表达式的lastIndex
属性指定的str的子字符串开始(test()
也将提升lastIndex
属性。)< / p>
重要提示:引用部分第一行的第一部分很重要。 If your regular expression uses the
的 “g”flag
。 只有当RegEx标记为g
时,才会出现此行为。