*
表示匹配日前面的子表达式0次或多次(且尽可能多的匹配)。/^(a*)b$/a
和字符串aaaaab
。(a*)
捕获到的字符串为aaaaa
。/^(a*)ab$/
。aaaa
。/^(a*)ab$/
的匹配过程:(a*)
匹配尽可能多的字符a
;(a*)
一直捕获,直到遇到字符b
。此时(a*)
已经捕获了aaaaa
;(a*)
之后的ab
匹配,此时字符串仅剩一个b
,导致无法完成匹配;(a*)
当前捕获的字符串中”吐出“一个字符a
,这时捕获结果为aaaa
,剩余字符串为ab
;ab
匹配。完成匹配。捕获组捕获结果为aaaa
。/^(a*)b$/
匹配字符串aaaaaa
.尽管能够一眼看出来无法匹配,但是正则表达式依旧会逐一回溯所有可能性,才能确定最终结果。这中“傻傻的”回溯过程就叫做悲观回溯。
/x*x*/
;/(x*)*/
。aaaaa,bbbbbb,ccccc
中,
分割的部分,使用split()
对字符串进行切割即可,还能保证代码的性能是线性的。