1. 概述
貪婪與非貪婪模式影響的是被量詞修飾的子表達(dá)式的匹配行為铲敛。
貪婪模式:在整個(gè)表達(dá)式匹配成功的前提下拖吼,盡可能多的匹配(最大范圍匹配);
非貪婪模式:在整個(gè)表達(dá)式匹配成功的前提下粒没,盡可能少的匹配(最小范圍匹配);
2. 貪婪與非貪婪模式匹配舉例
eg:
源字符串:aa<div>test1</div>bb<div>test2</div>cc
正則一:<div>.*</div>
let str='aa<div>test1</div>bb<div>test2</div>cc'
let reg = '<div>.*</div>'
console.log(str.match(reg)[0])
// 輸出:<div>test1</div>bb<div>test2</div>
正則二:<div>.*?</div>
let str='aa<div>test1</div>bb<div>test2</div>cc'
let reg = '<div>.*?</div>'
console.log(str.match(reg)[0])
// 輸出:<div>test1</div>
(這里指的是一次匹配結(jié)果藻懒,所以沒(méi)包括<div>test2</div>)
從上例可以看出:
正則一采用的貪婪模式剔猿,在匹配到第一個(gè)“</div>”時(shí)已經(jīng)可以使整個(gè)表達(dá)式匹配成功,但是由于采用的是貪婪模式嬉荆,所以仍然要向右嘗試匹配归敬,查看是否還有更長(zhǎng)的可以成功匹配的子串,匹配到第二個(gè)“</div>”后鄙早,向右再?zèng)]有可以成功匹配的子串汪茧,匹配結(jié)束,匹配結(jié)果為“<div>test1</div>bb<div>test2</div>”限番。
正則二采用的是非貪婪模式舱污,在匹配到第一個(gè)“</div>”時(shí)使整個(gè)表達(dá)式匹配成功,由于采用的是非貪婪模式弥虐,所以結(jié)束匹配扩灯,不再向右嘗試,匹配結(jié)果為“<div>test1</div>”霜瘪。
更多詳細(xì)介紹參考鏈接:
https://blog.csdn.net/lxcnn/article/details/4756030