字面字元:a, b

Baseline 已廣泛支援

此特性已相當成熟,可在許多裝置和瀏覽器版本上使用。自 ⁨2015 年 7 月⁩以來,各瀏覽器均已提供此特性。

字面量字元精確地指定了自身,用於在輸入文字中進行匹配。

語法

正則表示式
c

引數

c

單個字元,且不是下述的語法字元。

描述

在正則表示式中,大多數字符都可以以字面量形式出現。它們通常是模式中最基本的構建塊。例如,以下是刪除 HTML 標籤示例中的一個模式:

js
const pattern = /<.+?>/g;

在這個例子中,.+? 被稱為語法字元。它們在正則表示式中具有特殊含義。模式中的其餘字元(<>)是字面量字元。它們在輸入文字中匹配自身:左尖括號和右尖括號。

以下字元是正則表示式中的語法字元,它們不能以字面量字元的形式出現:

在字元類中,更多字元可以以字面量形式出現。欲瞭解更多資訊,請參閱字元類頁面。例如,\.[.] 都匹配字面量 .。然而,在 v 模式字元類中,有一組不同的字元被保留為語法字元。為了最全面地說明,下表列出了 ASCII 字元以及它們在不同上下文中是否可以轉義或不轉義地出現,“✅”表示該字元表示其自身,“❌”表示它會丟擲語法錯誤,“⚠️”表示該字元有效但表示的不是其自身。

字元 uv 模式下,字元類之外 u 模式字元類中 v 模式字元類中
未轉義 已轉義 未轉義 已轉義 未轉義 已轉義
123456789 "'
ACEFGHIJKLMN
OPQRTUVXYZ_
aceghijklmop
quxyz
!#%&,:;<=>@`~
]
()[{}
*+?
/
0DSWbdfnrstvw ⚠️⚠️⚠️
B ⚠️
$. ⚠️
| ⚠️
- ✅⚠️❌⚠️
^ ⚠️✅⚠️✅⚠️
\ ❌⚠️❌⚠️❌⚠️

注意:v 模式字元類中,既可以轉義又可以不轉義的字元恰好是那些被禁止作為“雙標點符號”的字元。有關更多資訊,請參閱v 模式字元類

每當你想字面量匹配一個語法字元時,你需要用反斜槓 (\) 轉義它。例如,要在模式中匹配字面量 *,你需要在模式中寫成 \*。將語法字元用作字面量字元會導致意外結果或引起語法錯誤——例如,/*/ 不是有效的正則表示式,因為量詞前面沒有模式。在非 Unicode 模式下,如果 ]{} 不可能被解析為字元類或量詞分隔符的結束,它們可以字面量出現。這是一種為了網路相容性而廢棄的語法,你不應該依賴它。

正則表示式字面量不能用某些非語法字面量字元指定。/ 不能作為字面量字元出現在正則表示式字面量中,因為 / 被用作字面量本身的分隔符。如果你想匹配字面量 /,你需要將其轉義為 \/。行終止符也不能作為字面量字元出現在正則表示式字面量中,因為字面量不能跨越多行。你需要使用字元轉義,例如 \n。使用 RegExp() 建構函式時沒有這些限制,儘管字串字面量有其自身的轉義規則(例如,"\\" 實際上表示單個反斜槓字元,因此 new RegExp("\\*")/\*/ 是等效的)。

非 Unicode 模式下,模式被解釋為 UTF-16 碼元序列。這意味著代理對實際上表示兩個字面量字元。這在與其他特性結合使用時會導致意外行為:

js
/^[😄]$/.test("😄"); // false, because the pattern is interpreted as /^[\ud83d\udc04]$/
/^😄+$/.test("😄😄"); // false, because the pattern is interpreted as /^\ud83d\udc04+$/

在 Unicode 模式下,模式被解釋為 Unicode 碼點序列,代理對不會被拆分。因此,你應該始終優先使用 u 標誌。

示例

使用字面量字元

以下示例複製自字元轉義。字元 ab 是模式中的字面量字元,而 \n 是跳脫字元,因為它不能以字面量形式出現在正則表示式字面量中。

js
const pattern = /a\nb/;
const string = `a
b`;
console.log(pattern.test(string)); // true

規範

規範
ECMAScript® 2026 語言規範
# prod-PatternCharacter

瀏覽器相容性

另見