2014-10-29 102 views
1

我有一个变量,贪婪行为

var inp = "B123213"; 

现在,当我申请了下面的正则表达式,

var rg = /\d+/; 

,并执行Stringmatch操作,

console.log(inp.match(rg)); 

我得到输出为123213,表示表达式是贪婪的。但是,当我使用*而不是+时,表达式不会返回匹配项。请帮我理解为什么返回空匹配。它不应该返回相同的结果。

由于医生说约?

如果之后的任何量词*,+,?,或{}的立即使用,使得 量词非贪婪(匹配尽可能少的字符), 而不是默认的,这是贪婪的(尽可能多地匹配 个字符)。例如,应用/ \ d + /到“123abc” 匹配“123”。但是应用/ \ d +?/到相同的字符串只匹配 “1”。

我认为只有在应用/\d*?/时才会有空的匹配。当*使用它

+2

学习和玩正则表达式的一个很棒的网站是http://regex101.com/我帮助我大大学习和玩正则表达式。 – 2014-10-29 18:44:52

回答

4

您的字符串更改为123213,它会匹配所有的数字。

除非必须,发动机不会前进。

这看到了B 123213,它可以匹配nothing\d*在该位置,
它确实是这样。

所以,它真正的位置第一,量词第二。

+0

**发动机不会前进,除非必须。**这是现货,+1 – anubhava 2014-10-29 18:55:28

3

返回三个matches.One空和第二相同一个由+ .The空是由于这样的事实:当字符串被消耗\d*可以在结束时和在开始为空字符串匹配返回你会得到第一场比赛。让它成为一个组,看看所有的比赛。

请参阅演示。

http://regex101.com/r/gT6kI4/2

+0

将退出组。但即使如此,与最高元素的比赛应该已经返回,我错了吗? – BatScream 2014-10-29 18:54:47

+0

OP在他的正则表达式中没有'g'标记 – anubhava 2014-10-29 18:54:47

+0

@BatScream如果你使用'g'标志,所有的匹配将被返回。只有第一个是空的。参见http://regex101.com/r/ gT6kI4/3 – vks 2014-10-29 18:57:00