懒惰的 ?在正则表达式中
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
之后停止匹配(即使它 可以 匹配更多。它将仅当正则表达式不匹配时才匹配更多)。
有人可以举例说明以下正则表达式之间有什么区别吗?
/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
之后停止匹配(即使它 可以 匹配更多。它将仅当正则表达式不匹配时才匹配更多)。