貪婪模式
之前說了正則的量詞,但是量詞會帶來一個到底該匹配哪個
的問題。
如下正則表達式:
\d{3,6}
這個正則表達式是匹配3到6個數字,但是當這個正則表達式被用來匹配12345678
這個字符串,到底該匹配三個數字還是6個數字,亦或者是都不是?
可以先試試:
let text = '12345678'
let reg = /\d{3,6}/g
text.replace(reg, 'X') // X78
可以看到該正則將123456
六個數字替換為了X
,也就是說,在正常模式下,正則表達式會盡可能多的匹配。
正常情況下,正則表達式采用貪婪模式,即,盡可能多的匹配。
非貪婪模式
但是,有時我們需要正則表達式盡可能少的匹配,也就是說,一旦成功匹配不再繼續嘗試,這就是非貪婪模式。那么,如何進入非貪婪模式呢?
做法很簡單,在量詞后加上?
即可。
let text = '12345678'
let reg = /\d{3,6}?/g
text.replace(reg, 'X') // X45678
可以發現,在非貪婪模式下,該正則只匹配了123
,即最少匹配。