懒惰的 ?在正则表达式中

Lazy ? in regex

有人可以举例说明以下正则表达式之间有什么区别吗?

/b\w+?/g

/b\w/g

基于 Lazy 的正则表达式文档?:使前面的量词变得惰性,使其匹配尽可能少的字符。默认情况下,量词是贪婪的,会匹配尽可能多的字符。

两个正则表达式将匹配相同的东西(一个 "alphanumeric" 字符)。只有当正则表达式变得更加复杂时,它们之间的差异才会变得明显。

例如,

\b\w\.

将匹配 "A." 但不会匹配 "Mr." 因为 \w 只匹配一个字符。

\b\w+?\.

两者都匹配。这与懒惰无关,而是与第一个正则表达式中缺少量词有关。但是如果你比较

\b\w+\d

\b\w+?\d

你会注意到一个重要的区别:两个正则表达式匹配字符串 "R2D2" 的方式不同——第一个匹配 "R2D2",第二个只匹配 "R2",因为 ? 告诉 \w+ 标记匹配尽可能少的字符,因此它在 R 之后停止匹配(即使它 可以 匹配更多。它将仅当正则表达式不匹配时才匹配更多)。