正規表達式筆記:字元類(character classes)
總結
此篇文章大部分的內容是根據 MDN: Regular expressions > Character classes 整理出來的筆記。
筆記
定義
javascript.info: In JavaScript regular expressions, a character class is a special notation that matches any symbol from a certain set.
character class 讓開發者可以定義「字元比對的範疇」。
各種範疇與文法
[]
:根據 []
內列出的條件進行比對。舉例:[abc]
會挑出 apple
中的 a
、banana
中的 b
與 a
,以及 cherry
中的 c
[^]
:當 ^
被放在 []
中,其意義為「尋找不在 []
範圍內的字符」。舉例:[^abc]+
會挑出 apple
中的 pple
、banana
中的 n
,以及 cherry
中的 herry
以上條件可搭配 -
字符進行範圍搜尋,但如果是由 -
開頭或結尾,則 -
會被當作字符進行比對。範例如下:
[a-z]
代表「尋找 a 至 z 這個範圍」,比如Apple
會挑出p
、p
、l
與e
[^a-z]
代表「尋找非 a 至 z 這個範圍」,比如Apple
會挑出A
[-t]
代表「尋找符合-t
的內容」,比如apple-pie
會挑出-
,而apple-tea
會挑出-
與t
.
會根據擺放位置會有兩種用途,範例如下:
- 擺在
[]
中:視為比對.
字元,比如[.]
會挑出3.14
中的.
- 沒有包含在
[]
中:代表「行終止符(line terminator)以外的字元」,比如.y+
會判定my
與cherry
這兩個單字符合比對條件,但不會判定yes
符合,因為yes
中的y
前方有行終止符
\d
:意義等同 [0-9]
,代表尋找阿拉伯數字
\D
:代表「非數字內容」,比如比對 3.14
時會挑出 .
\w
:意義等同 [A-Za-z0-9_]
,會尋找拉丁英數與底線符號
\W
:代表「非拉丁英數、非底線」內容,比如比對 2%
時會挑出 %
,而 \W+
會挑出 笑死XD
中的 笑死
\s
:意義等同 [\f\n\r\t\v\u0020\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]
,用於比對「空白字元」
\S
:代表「非空白字元」的內容,比如拿條件 \S+
比對 hello world
會挑出 hello
與 world
\
為跳脫字符,搭配特殊字元可讓該字元失去原本的特殊效果、反之亦然。範例如下:
- 將
\d
變成\\d
後,後者的意義不再是「比對阿拉伯數字」,而是變成「比對\d
此字串模式」 - 如果是
d
變成\d
,則從原本的「比對字母d
」變成「比對阿拉伯數字」
|
為邏輯上的「或(or)」比對。比如 green|red
代表「尋找 green
或 red
這個模式的字串」
MDN 範例解讀
const regexpFourDigits = /\b\d{4}\b/g;
\b
代表邊際\d{4}
代表要尋找「數量為 4 個」的阿拉伯數字
總結:比對「前後都是『邊際』且『數量為 4 個』的阿拉伯數字串」。
const regexpWordStartingWithA = /\b[aA]\w+/g;
\b
代表邊際[aA]
代表尋找A
或a
\w+
代表要找「數量為 1 或無限多」的「拉丁英數與底線符號」
總結:比對「開頭為 A
或 a
的單字」
const regexpVowels = /[AEIOUYaeiouy]/g;
意圖:比對「發母音的字符」