「正則表達式」 一、正則表達式字符匹配(前端必懂 )

原書這麼一句話,特別棒:正則表達式是匹配模式,要麼匹配字符,要麼匹配位置,要記住。

1. 兩種模糊匹配

正則表達式的強大在於它的模糊匹配,這裡介紹兩個方向上的“模糊”:橫向模糊和縱向模糊。

  • 橫向模糊匹配

即一個正則可匹配的字符串長度不固定,可以是多種情況。

如 /ab{2,5}c/ 表示匹配: 第一個字符是 "a" ,然後是 2 - 5 個字符 "b" ,最後是字符 "c" :

「正則表達式」 一、正則表達式字符匹配(前端必懂 )

  • 縱向模糊匹配

即一個正則可匹配某個不確定的字符,可以有多種可能。

如 /[abc]/ 表示匹配 "a", "b", "c" 中任意一個。

「正則表達式」 一、正則表達式字符匹配(前端必懂 )

2. 字符組

  • 範圍表示法

可以指定字符範圍,比如 [1234abcdUVWXYZ] 就可以表示成 [1-4a-dU-Z] ,使用 - 來進行縮寫。

如果要匹配 "a", "-", "z" 中任意一個字符,可以這麼寫: [-az] 或 [a\\-z] 或 [az-] 。

  • 排除字符組

即需要排除某些字符時使用,通過在字符組第一個使用 ^ 來表示取反,如 [^abc] 就表示匹配除了 "a", "b", "c" 的任意一個字符。

  • 常見簡寫形式
「正則表達式」 一、正則表達式字符匹配(前端必懂 )

3. 量詞

量詞也稱重複,常用簡寫如下:

「正則表達式」 一、正則表達式字符匹配(前端必懂 )

  • 貪婪匹配和惰性匹配

在正則 /\\d{2,4}/ ,表示數字連續出現 2 - 4 次,可以匹配到 2 位、 3 位、4 位連續數字。

但是在 貪婪匹配 如 /\\d{2,4}/g ,會盡可能多匹配,如超過 4 個,就只匹配 4 個,如有 3 個,就匹配 3 位。

而在 惰性匹配 如 /\\d{2,4}?/g ,會 儘可能少 匹配,如超過 2 個,就只匹配 2 個,不會繼續匹配下去。

「正則表達式」 一、正則表達式字符匹配(前端必懂 )

「正則表達式」 一、正則表達式字符匹配(前端必懂 )

4. 多選分支

即提供多個子匹配模式任選一個,使用 |(管道符)分隔,由於分支結構也是惰性,即匹配上一個後,就不會繼續匹配後續的。

格式如:(r1|r2|r3),我們就可以使用 /leo|pingan/ 來匹配 "leo" 和 "pingan"。

「正則表達式」 一、正則表達式字符匹配(前端必懂 )

5. 案例分析

匹配字符,無非就是字符組、量詞和分支結構的組合使用。

  • 十六進制顏色值匹配
「正則表達式」 一、正則表達式字符匹配(前端必懂 )

  • 時間和日期匹配
「正則表達式」 一、正則表達式字符匹配(前端必懂 )

  • Windows操作系統文件路徑匹配

盤符使用 [a-zA-Z]:\\\\ ,這裡需要注意 \\ 字符需要轉義,並且盤符不區分大小寫;

文件名或文件夾名,不能包含特殊字符,使用 [^\\\\:*<>|"?\\r\\n/] 表示合法字符;

並且至少有一個字符,還有可以出現任意次,就可以使用 ([^\\\\:*<>|"?\\r\\n/]+\\\\)* 匹配任意個 文件夾\\;

還有路徑最後一部分可以是 文件夾 ,即沒有 \\ 於是表示成 ([^\\\\:*<>|"?\\r\\n/]+)?。

「正則表達式」 一、正則表達式字符匹配(前端必懂 )

  • id匹配

如提取

中的 id="leo" :
「正則表達式」 一、正則表達式字符匹配(前端必懂 )

tips1:由於 . 匹配雙引號,且 * 貪婪,就會持續匹配到最後一個雙引號結束。

tips2:使用惰性匹配,但效率低,有回溯問題。

tips3:最終優化。

"


分享到:


相關文章: