字元類

字元類區分不同種類的字元,例如,區分字母和數字。

試一試

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]
[a-c]

字元類:匹配其中包含的任何一個字元。你可以使用連字元指定一個字元範圍,但如果連字元出現在方括號中包含的第一個或最後一個字元,它將被視為一個字面連字元,作為普通字元包含在字元類中。

例如,[abcd][a-d] 相同。它們匹配 "brisket" 中的 "b" 和 "chop" 中的 "c"。

例如,[abcd-][-abcd] 匹配 "brisket" 中的 "b"、"chop" 中的 "c" 和 "non-profit" 中的 "-"(連字元)。

例如,[\w-][A-Za-z0-9_-] 相同。它們都匹配 "brisket" 中的 "b"、"chop" 中的 "c" 和 "non-profit" 中的 "n"。

unicodeSetsv)標誌啟用時,字元類有一些額外的功能。有關更多資訊,請參閱字元類參考。

[^xyz]
[^a-c]

否定字元類:匹配方括號中未包含的任何字元。你可以使用連字元指定一個字元範圍,但如果連字元出現在 ^ 之後的第一個字元或方括號中包含的最後一個字元,它將被視為一個字面連字元,作為普通字元包含在字元類中。例如,[^abc][^a-c] 相同。它們最初匹配 "bacon" 中的 "o" 和 "chop" 中的 "h"。

注意: ^ 字元也可能表示輸入的開始

.

萬用字元:匹配除行終止符(\n\r\u2028\u2029)之外的任何單個字元。例如,/.y/ 匹配 "yes make my day" 中的 "my" 和 "ay",但不匹配 "yes",因為 "yes" 中 "y" 前面沒有字元。如果 dotAll (s) 標誌啟用,也匹配行終止符。在字元類內部,點號失去其特殊含義,匹配一個字面點號。

\d

數字字元類轉義:匹配任何數字(阿拉伯數字)。等同於 [0-9]。例如,/\d//[0-9]/ 匹配 "B2 is the suite number" 中的 "2"。

\D

非數字字元類轉義:匹配任何非數字(阿拉伯數字)字元。等同於 [^0-9]。例如,/\D//[^0-9]/ 匹配 "B2 is the suite number" 中的 "B"。

\w

單詞字元類轉義:匹配基本拉丁字母中的任何字母數字字元,包括下劃線。等同於 [A-Za-z0-9_]。例如,/\w/ 匹配 "apple" 中的 "a"、"$5.28" 中的 "5"、"3D" 中的 "3" 和 "Émanuel" 中的 "m"。

\W

非單詞字元類轉義:匹配基本拉丁字母中非單詞字元的任何字元。等同於 [^A-Za-z0-9_]。例如,/\W//[^A-Za-z0-9_]/ 匹配 "50%" 中的 "%" 和 "Émanuel" 中的 "É"。

\s

空白字元類轉義:匹配單個空白字元,包括空格、製表符、換頁符、換行符和其他 Unicode 空格。等同於 [\f\n\r\t\v\u0020\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]。例如,/\s\w*/ 匹配 "foo bar" 中的 " bar"。

\S

非空白字元類轉義:匹配除空白字元之外的單個字元。等同於 [^\f\n\r\t\v\u0020\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]。例如,/\S\w*/ 匹配 "foo bar" 中的 "foo"。

\t 匹配水平製表符。
\r 匹配回車符。
\n 匹配換行符。
\v 匹配垂直製表符。
\f 匹配換頁符。
[\b] 匹配退格符。如果你正在尋找單詞邊界斷言 (\b),請參閱斷言
\0 匹配一個 NUL 字元。其後不能跟其他數字。
\cX

使用脫字號表示法匹配控制字元,其中 "X" 是 A-Z 的字母(對應程式碼點 U+0001U+001A)。例如,/\cM\cJ/ 匹配 "\r\n"。

\xhh 匹配程式碼為 hh(兩個十六進位制數字)的字元。
\uhhhh 匹配值為 hhhh(四個十六進位制數字)的 UTF-16 程式碼單元。
\u{hhhh}\u{hhhhh} (僅當設定了 u 標誌時。)匹配 Unicode 值為 U+hhhhU+hhhhh(十六進位制數字)的字元。
\p{UnicodeProperty}, \P{UnicodeProperty}

Unicode 字元類轉義:根據其 Unicode 字元屬性匹配字元(例如,表情符號字元、日語片假名字元或中文/日語漢字字元等)。

\

表示後面的字元應被特殊處理,或“轉義”。它有兩種行為方式。

  • 對於通常按字面意義處理的字元,表示下一個字元是特殊字元,不應按字面意義解釋。例如,/b/ 匹配字元 "b"。透過在 "b" 前面加上反斜槓,即使用 /\b/,該字元變得特殊,表示匹配一個單詞邊界。
  • 對於通常被特殊處理的字元,表示下一個字元不是特殊字元,應按字面意義解釋。例如,"*" 是一個特殊字元,表示匹配前面字元的 0 次或多次出現;例如,/a*/ 表示匹配 0 個或多個 "a"。要字面匹配 *,請在其前面加上反斜槓;例如,/a\*/ 匹配 "a*"。

注意:要字面匹配此字元,請用其自身轉義。換句話說,要搜尋 \,請使用 /\\/

x|y

或(選擇):匹配 "x" 或 "y"。每個由豎線 (|) 分隔的組成部分稱為一個替代項。例如,/green|red/ 匹配 "green apple" 中的 "green" 和 "red apple" 中的 "red"。

注意:“或”是指定“一組選擇”的另一種方式,但它不是字元類。“或”不是原子 — 你需要使用一個才能將其作為更大模式的一部分。[abc] 在功能上等同於 (?:a|b|c)

示例

查詢一系列數字

在這個例子中,我們用 \d{4} 匹配一個由 4 個數字組成的序列。\b 表示一個單詞邊界(即,不要在數字序列的中間開始或結束匹配)。

js
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 邊界。

js
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 的“基本多語言平面”包含世界上使用的大多數字符,我們可以使用字元類和範圍來匹配用這些字元編寫的單詞。

js
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 標誌用於使模式不區分大小寫,因此它匹配大寫和小寫母音。

js
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

另見