正規表示式 貪婪模式
有寡慾之人,必有貪婪之徒。
從正面來講,清心寡慾是一種達觀豁達的生活態度,但從另一個角度來看,未免失之消極。
相同的道理,貪婪從另一個角度觀察,未嘗不是積極向上的表現,尤其是作為年輕人的我們。
寡慾也好,貪婪也罷,一切的關鍵在於必須遵守規則底線。
在正規表示式中,如果說寡慾之人是惰性匹配模式,那貪婪之徒必定是貪婪匹配模式。
關於惰性匹配模式可以參閱正規表示式惰性匹配一章節。
首先看一段程式碼例項:
[JavaScript] 純文字檢視 複製程式碼執行程式碼let str="antzone"; let reg=/a.*n/; console.log(str.match(reg));
程式碼執行效果截圖如下:
特別說明:如果在重複量詞的右邊不新增問號(?),預設都是採用貪婪匹配。
/a.*n/會匹配以字元"a"開頭,以"n"結尾的字串,正則中間是採用重複量詞星號(*)。
匹配結果是"antzon"而不是"an",由此可見匹配量詞竭盡所能匹配所能匹配到的內容。
一.貪婪匹配概念:
所謂的貪婪匹配就是在符合規則的條件下,正規表示式儘可能多的匹配內容。
實現貪婪匹配模式的核心是正規表示式重複量詞,正是由於它的存在,才有貪婪的可能。
程式碼例項如下:
[JavaScript] 純文字檢視 複製程式碼執行程式碼let str="antzone"; let reg=/\w/g; console.log(str.match(reg));
程式碼執行效果截圖如下:
可能有朋友會有這樣的疑問,程式碼沒有使用重複量詞,不是也匹配到了字串的每一個字元嗎。
這其實是一個誤讀,上面正規表示式進行了7次匹配,每一次只會匹配到一個字元。
程式碼修改如下:
[JavaScript] 純文字檢視 複製程式碼執行程式碼let str="antzone"; let reg=/\w+/g; console.log(str.match(reg));
程式碼執行效果截圖如下:
上面使用了重複量詞+,採用貪婪匹配模式,那麼每一次匹配都儘可能多的匹配字元。
二.加強鞏固:
下面通過一段經典的程式碼例項來加深一下對於貪婪匹配的掌握。
程式碼例項如下:
[JavaScript] 純文字檢視 複製程式碼執行程式碼let str="<div><ul><li></li></ul></div>"; console.log(str.match(/(<.*>)(<.*>)/));
程式碼執行效果截圖如下:
上面正規表示式中,有多個正規表示式重複量詞同時使用。
根據先到先得的原則,左側的重複量詞在保證右側重複量詞最小匹配的情況下,儘可能多的匹配。
那麼第一個子表示式(<.*>)會匹配到</ul>,那麼第二個子表示式匹配最後的</div>。
也就是在滿足自己最大欲望的同時,給別人也留了一線生機。
相關文章
- 正規表示式:貪婪模式與非貪婪模式模式
- Java 正規表示式匹配模式(貪婪型、勉強型、佔有型)Java模式
- JAVA 正規表示式的三種模式: 貪婪, 勉強和佔有的討論Java模式
- 11.一個正規表示式案例讓你馬上明白貪婪匹配與禁止貪婪! 超級實用!
- 正規表示式支配匹配模式模式
- 正規表示式模式修飾符模式
- 正規表示式
- 正規表示式.
- 【正規表示式】常用的正規表示式(數字,漢字,字串,金額等的正規表示式)字串
- 常用正規表示式
- JavaScript 正規表示式JavaScript
- MySQL正規表示式MySql
- 正規表示式(java)Java
- SQL正規表示式SQL
- python正規表示式Python
- 正規表示式合集
- 正規表示式(一)
- Python 正規表示式Python
- Python——正規表示式Python
- PHP正規表示式PHP
- 正規表示式概括
- javascript正規表示式JavaScript
- java正規表示式Java
- Shell正規表示式
- 正規表示式 教程
- 正規表示式 【四】
- 正規表示式匹配
- Python:正規表示式Python
- php –正規表示式PHP
- 【Linux】正規表示式Linux
- 【JavaScript】正規表示式JavaScript
- URL正規表示式
- 正規表示式 split()
- 初探正規表示式
- 正規表示式 test()
- 正規表示式(?!)作用
- 正規表示式 {n,}
- 【java】正規表示式Java