1. 程式人生 > >[基礎 18_001] 正則表示式基礎

[基礎 18_001] 正則表示式基礎

文字字元

字元 匹配內容
字母字元 本身
\0 NULL 字元(\u0000)
\t Tab 製表符(\u0009)
\n 換行(\u000A)
\v 垂直製表符(\u000B)
\f 換頁符(\u000C)
\r 回車(\u000D)
\xFF 由兩位十六進位制數轉義為拉丁字母,比如 \x0A 相當於 \n
\uFFFF 由四位十六進位制數轉義為 Unicode 字元,比如 \u0009 相當於 \t

1. 一些標點符號在正則表示式中由特殊的意義:

^ $ . * + ? = ! : | \ / ( ) [ ] { }

要想匹配上述字元,需要用 \ 轉義
2. 如果記不住哪些標點符號由特殊意義,那麼就在所有標點符號前放置 \ 進行轉義。要匹配 \ ,用 \ 轉義。

字元類

將字面值字元放進方括號內就組成了字元類。

字元 匹配內容
[…] 在方括號內的任意一個字元
[^…] 任意一個不在方括號內的字元
. 除換行或其它 Unicode 行終止符之外的任意字元
\w 任意 ASCII 字元,等價於 [a-zA-Z0-9_]
\W 任意非 ASCII 字元,等價於 [^a-zA-Z0-9_]
\s 任意 Unicode 空白字元
\S 任意非 Unicode 空白字元,注意 \w 和 \S 不同
\d 任意 ASCII 數字,等價於 [0-9]
\D 任意非 ASCII 數字字元,等價於 [^0-9]
[\b] 退格,只有作為字元類單獨元素才表示退格,否則有特殊含義

重複

字元 匹配內容
{n,m} 匹配前面條目至少 n 次,最多 m 次
{n,} 匹配前面條目 n 次以上
{n} 匹配前面條目正好 n 次
? 匹配前面條目出現 0 次或 1 次,相當於 {0,1}
+ 匹配前面條目 1 次以上,相當於 {1,}
* 匹配前面條目 0 次或 多次,相當於 {0,}

1. 上表中的匹配是儘可能多地匹配,而且允許後續正則表示式繼續匹配,稱之為”貪婪匹配”。a+ 匹配 “aaa”,會匹配三個字元
2. 我們可以使用非貪婪匹配,只需要在後面跟隨一個 ? 號即可:“??”, “+?”, “*?”, “{1,5}?”。a+? 匹配 “aaa”,只匹配第一個 a

選擇,組合和引用

字元 含義
| 選擇,匹配左邊的子表示式或右邊的子表示式
(…) 組合,將多個專案組合成為一個單元,可以對該單元使用 *, +, ?,
(?:…) 只組合,將多個專案組合為一個單元,但是所匹配的子字串不建立引用
\n 引用,代表組號為 n 的組合所首次匹配的子字串,組號是按從左往右計算
左括號出現的順序而得出的,(?: 格式的組合不被標記組號

指定匹配位置

字元 含義
^ 匹配字串的開頭,在多行查詢中,匹配行首
$ 匹配字串的結尾,在多行查詢中匹配行尾
\b 匹配單詞邊界,匹配 \w 和 \W 之間或者 \w 和 字串的開頭或結尾
之間的位置(然而,[\b]匹配退格)
\B 匹配不是單詞邊界的位置
(?=p) 一個積極先行斷言,要求接下來的字串匹配模式 p,
但是並不將這些字串包含在匹配中
(?!p) 一個消極先行斷言,要求接下來的字串不匹配模式 p

標記

字元 含義
i 忽略大小寫
g 全域性匹配,找到所有匹配而不是在第一個匹配處停止
m 多行模式,^ 匹配行首或字串開頭,$ 匹配行尾或字串結尾

參考資料

[1] (JavaScript: The.Definitive.Guide).David.Flanagan “JavaScript 權威指南-第六版”