Eloquent Javascript循环使用RegExp匹配

时间:2015-04-12 16:41:18

标签: javascript regex

以下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'

1 个答案:

答案 0 :(得分:5)

RegExp对象会记住最后一个与lastIndex属性匹配的位置。

引用MDN Documentation

  

如果正则表达式使用"g"标志,则可以多次使用exec()方法在同一字符串中查找连续匹配。执行此操作时,搜索从正则表达式的lastIndex属性指定的str的子字符串开始(test()也将提升lastIndex属性。)< / p>

重要提示:引用部分第一行的第一部分很重要。 If your regular expression uses the的 “g”flag只有当RegEx标记为g时,才会出现此行为。