Literal character: a, b

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.

Một literal character chỉ định chính xác ký tự đó để được khớp trong văn bản đầu vào.

Cú pháp

regex
c

Tham số

c

Một ký tự đơn lẻ không phải là một trong các ký tự cú pháp được mô tả bên dưới.

Mô tả

Trong regular expressions, hầu hết các ký tự có thể xuất hiện theo nghĩa đen. Chúng thường là các khối xây dựng cơ bản nhất của pattern. Ví dụ, đây là một pattern từ ví dụ Xóa HTML tags:

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

Trong ví dụ này, ., +, và ? được gọi là ký tự cú pháp. Chúng có ý nghĩa đặc biệt trong regular expressions. Phần còn lại của các ký tự trong pattern (<>) là các literal characters. Chúng khớp chính chúng trong văn bản đầu vào: dấu ngoặc nhọn trái và phải.

Các ký tự sau là các ký tự cú pháp trong regular expressions, và chúng không thể xuất hiện như các literal characters:

Trong character classes, nhiều ký tự hơn có thể xuất hiện theo nghĩa đen. Để biết thêm thông tin, xem trang Character class. Ví dụ \.[.] đều khớp một dấu chấm literal. Tuy nhiên, trong v-mode character classes, có một tập hợp khác các ký tự được dành riêng làm ký tự cú pháp. Để toàn diện nhất, bên dưới là bảng các ký tự ASCII và liệu chúng có thể xuất hiện đã thoát hoặc chưa thoát trong các ngữ cảnh khác nhau, trong đó "✅" có nghĩa là ký tự đại diện cho chính nó, "❌" có nghĩa là nó ném ra lỗi cú pháp, và "⚠️" có nghĩa là ký tự hợp lệ nhưng có nghĩa khác với chính nó.

Ký tự Bên ngoài character classes trong chế độ u hoặc v Trong u-mode character classes Trong v-mode character classes
Chưa thoát Đã thoát Chưa thoát Đã thoát Chưa thoát Đã thoát
123456789 "'
ACEFGHIJKLMN
OPQRTUVXYZ_
aceghijklmop
quxyz
!#%&,:;<=>@`~
]
()[{}
*+?
/
0DSWbdfnrstvw ⚠️⚠️⚠️
B ⚠️
$. ⚠️
| ⚠️
- ✅⚠️❌⚠️
^ ⚠️✅⚠️✅⚠️
\ ❌⚠️❌⚠️❌⚠️

Note: Các ký tự có thể cả đã thoát và chưa thoát trong v-mode character classes là chính xác những ký tự bị cấm là "dấu câu kép". Xem v-mode character classes để biết thêm thông tin.

Bất cứ khi nào bạn muốn khớp một ký tự cú pháp theo nghĩa đen, bạn cần thoát nó bằng dấu gạch chéo ngược (\). Ví dụ, để khớp một * literal trong một pattern, bạn cần viết \* trong pattern. Sử dụng các ký tự cú pháp như các literal characters hoặc dẫn đến các kết quả không mong đợi hoặc gây ra lỗi cú pháp — ví dụ, /*/ không phải là một regular expression hợp lệ vì quantifier không được đứng trước bởi một pattern. Trong Unicode-unaware mode, ], {, và } có thể xuất hiện theo nghĩa đen nếu không thể phân tích chúng như sự kết thúc của character class hoặc dấu phân giới quantifier. Đây là cú pháp không dùng nữa để tương thích web, và bạn không nên dựa vào nó.

Regex literals không thể được chỉ định với một số literal characters không phải cú pháp nhất định. / không thể xuất hiện như một literal character trong một regex literal, vì / được sử dụng làm dấu phân giới của literal. Bạn cần thoát nó như \/ nếu bạn muốn khớp một / literal. Các ký tự kết thúc dòng cũng không thể xuất hiện như các literal characters trong một regex literal, vì một literal không thể trải dài nhiều dòng. Bạn cần sử dụng character escape như \n thay thế. Không có các hạn chế như vậy khi sử dụng constructor RegExp(), mặc dù string literals có các quy tắc thoát riêng của chúng (ví dụ, "\\" thực tế biểu thị một ký tự dấu gạch chéo ngược đơn lẻ, vì vậy new RegExp("\\*")/\*/ tương đương).

Trong Unicode-unaware mode, pattern được diễn giải như một chuỗi các UTF-16 code units. Điều này có nghĩa là các surrogate pairs thực sự đại diện cho hai literal characters. Điều này gây ra các hành vi không mong đợi khi kết hợp với các tính năng khác:

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

Trong Unicode-aware mode, pattern được diễn giải như một chuỗi các code points Unicode, và các surrogate pairs không bị tách ra. Do đó, bạn nên luôn ưu tiên sử dụng flag u.

Ví dụ

Sử dụng literal characters

Ví dụ sau được sao chép từ Character escape. Các ký tự ab là literal characters trong pattern, và \n là một ký tự đã thoát vì nó không thể xuất hiện theo nghĩa đen trong một regex literal.

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

Thông số kỹ thuật

Specification
ECMAScript® 2027 Language Specification
# prod-PatternCharacter

Tương thích trình duyệt

Xem thêm