我正在尝试学习一些基本的Javascript正则表达式。首先,我阅读了文档和以下SO问题:
How do you access the matched groups in a JavaScript regular expression?

我想我已经理解了大多数的表达方式:

/(?:^|\s)format_(.*?)(?:\s|$)/g


除了这一部分:

(.*?)


我知道

.*


用于匹配0个或多个出现的任何字符(换行符或行终止符除外)。

但我不知道为什么

?


是必需的。

我在玩类似的东西:

/(?:^|\s)ab(.*?)ab(?:\s|$)/
' ab4545ab '


不管有没有,事情一直都一样。

?




(.*?)


有什么想法吗?

谢谢!

最佳答案

它使.*不贪心。这意味着正则表达式中下一个有效字符序列的首次出现将使.*停止。

如果没有?,则.*会消耗直到正则表达式中下一个有效字符序列的最后一次出现。

var s = "foo bar boo bar foo";

var greedy = /.*bar/;
var no_greed = /.*?bar/;

greedy.exec(s); // foo bar boo bar

no_greed.exec(s); // foo bar


因此,贪婪的人会消耗掉从第一个“小节”到最后一个“小节”。

非贪心只进入第一个“小节”。

关于javascript - Java正则表达式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11003297/

10-13 09:38