字元類
字元類區分不同種類的字元,例如,區分字母和數字。
試一試
const chessStory = "He played the King in a8 and she moved her Queen in c2.";
const regexpCoordinates = /\w\d/g;
console.log(chessStory.match(regexpCoordinates));
// Expected output: Array [ 'a8', 'c2']
const moods = "happy 🙂, confused 😕, sad 😢";
const regexpEmoticons = /[\u{1F600}-\u{1F64F}]/gu;
console.log(moods.match(regexpEmoticons));
// Expected output: Array ['🙂', '😕', '😢']
型別
| 字元 | 含義 |
|---|---|
[xyz]
|
字元類:匹配其中包含的任何一個字元。你可以使用連字元指定一個字元範圍,但如果連字元出現在方括號中包含的第一個或最後一個字元,它將被視為一個字面連字元,作為普通字元包含在字元類中。 例如, 例如, 例如, 當 |
|
|
否定字元類:匹配方括號中未包含的任何字元。你可以使用連字元指定一個字元範圍,但如果連字元出現在
注意: |
. |
萬用字元:匹配除行終止符( |
\d |
數字字元類轉義:匹配任何數字(阿拉伯數字)。等同於 |
\D |
非數字字元類轉義:匹配任何非數字(阿拉伯數字)字元。等同於 |
\w |
單詞字元類轉義:匹配基本拉丁字母中的任何字母數字字元,包括下劃線。等同於 |
\W |
非單詞字元類轉義:匹配基本拉丁字母中非單詞字元的任何字元。等同於 |
\s |
空白字元類轉義:匹配單個空白字元,包括空格、製表符、換頁符、換行符和其他 Unicode 空格。等同於 |
\S |
非空白字元類轉義:匹配除空白字元之外的單個字元。等同於 |
\t |
匹配水平製表符。 |
\r |
匹配回車符。 |
\n |
匹配換行符。 |
\v |
匹配垂直製表符。 |
\f |
匹配換頁符。 |
[\b] |
匹配退格符。如果你正在尋找單詞邊界斷言 (\b),請參閱斷言。 |
\0 |
匹配一個 NUL 字元。其後不能跟其他數字。 |
\cX
|
使用脫字號表示法匹配控制字元,其中 "X" 是 A-Z 的字母(對應程式碼點 |
\xhh
|
匹配程式碼為 hh(兩個十六進位制數字)的字元。 |
\uhhhh
|
匹配值為 hhhh(四個十六進位制數字)的 UTF-16 程式碼單元。 |
\u{hhhh} 或 \u{hhhhh}
|
(僅當設定了 u 標誌時。)匹配 Unicode 值為 U+hhhh 或 U+hhhhh(十六進位制數字)的字元。 |
\p{UnicodeProperty}, \P{UnicodeProperty} |
Unicode 字元類轉義:根據其 Unicode 字元屬性匹配字元(例如,表情符號字元、日語片假名字元或中文/日語漢字字元等)。 |
\ |
表示後面的字元應被特殊處理,或“轉義”。它有兩種行為方式。
注意:要字面匹配此字元,請用其自身轉義。換句話說,要搜尋 |
x|y
|
或(選擇):匹配 "x" 或 "y"。每個由豎線 (
注意:“或”是指定“一組選擇”的另一種方式,但它不是字元類。“或”不是原子 — 你需要使用一個組才能將其作為更大模式的一部分。 |
示例
查詢一系列數字
在這個例子中,我們用 \d{4} 匹配一個由 4 個數字組成的序列。\b 表示一個單詞邊界(即,不要在數字序列的中間開始或結束匹配)。
const randomData = "015 354 8787 687351 3512 8735";
const regexpFourDigits = /\b\d{4}\b/g;
console.table(randomData.match(regexpFourDigits));
// ['8787', '3512', '8735']
在字元類轉義參考中檢視更多示例。
查詢以 A 開頭(拉丁字母)的單詞
在這個例子中,我們匹配一個以字母 A 開頭的單詞。\b 表示一個單詞邊界(即,不要在單詞中間開始匹配)。[aA] 表示字母 "a" 或 "A"。\w+ 表示拉丁字母表中的任何字元,多次出現(+ 是一個量詞)。請注意,由於我們已經匹配到不再有單詞字元為止,因此不需要結尾的 \b 邊界。
const aliceExcerpt =
"I'm sure I'm not Ada,' she said, 'for her hair goes in such long ringlets, and mine doesn't go in ringlets at all.";
const regexpWordStartingWithA = /\b[aA]\w+/g;
console.table(aliceExcerpt.match(regexpWordStartingWithA));
// ['Ada', 'and', 'at', 'all']
在字元類轉義參考中檢視更多示例。
查詢單詞(來自 Unicode 字元)
我們可以使用一系列 Unicode 字元而不是拉丁字母表來識別單詞(從而能夠處理俄語或阿拉伯語等其他語言的文字)。Unicode 的“基本多語言平面”包含世界上使用的大多數字符,我們可以使用字元類和範圍來匹配用這些字元編寫的單詞。
const nonEnglishText = "Приключения Алисы в Стране чудес";
const regexpBMPWord = /([\u0000-\u0019\u0021-\uFFFF])+/gu;
// BMP goes through U+0000 to U+FFFF but space is U+0020
console.table(nonEnglishText.match(regexpBMPWord));
["Приключения", "Алисы", "в", "Стране", "чудес"];
在Unicode 字元類轉義參考中檢視更多示例。
計算母音
在這個例子中,我們計算文字中的母音(A、E、I、O、U、Y)數量。g 標誌用於匹配文字中所有出現的模式。i 標誌用於使模式不區分大小寫,因此它匹配大寫和小寫母音。
const aliceExcerpt =
"There was a long silence after this, and Alice could only hear whispers now and then.";
const regexpVowels = /[aeiouy]/gi;
console.log("Number of vowels:", aliceExcerpt.match(regexpVowels).length);
// Number of vowels: 26