我正在尝试学习一些基本的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/