贪婪和非贪婪
默认是贪婪的,如/a+/
则会尽可能多的匹配a
,如果想要尽可能少的匹配,则需要加?
,即/a+?/
子表达式与反向引用
$1
,$2
匹配子表达式,$&
全匹配的字符串\1
反向引用,引用在正则表达式中,如^(\d)\1$
即跟^(\d)\d$
一样,一个很经典的使用是在匹配html
节点,如<(\w+).*>.*</\1>
?:
表示不缓冲子表达式,如(?:\d+)(\s+)
,则$1
代表的是(\s+)
正向预查与负向预查
?=
正向预查,表示需要匹配的才能算匹配上的,如\B(?=\d{3})\B
,即需要匹配到非?!
负向预查,表示需要不匹配的才能算匹配上的,