原書這麼一句話,特別棒:正則表達式是匹配模式,要麼匹配字符,要麼匹配位置,要記住。
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匹配
如提取
tips1:由於 . 匹配雙引號,且 * 貪婪,就會持續匹配到最後一個雙引號結束。
tips2:使用惰性匹配,但效率低,有回溯問題。
tips3:最終優化。
閱讀更多 前端自習課 的文章