正則表達(dá)式——貪婪與非貪婪模式

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容