[基礎 18_001] 正則表示式基礎
阿新 • • 發佈:2018-12-08
文字字元
字元 | 匹配內容 |
---|---|
字母字元 | 本身 |
\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 權威指南-第六版”