Character classes
Character classes phân biệt các loại ký tự khác nhau, ví dụ như phân biệt giữa chữ cái và chữ số.
Try it
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 ['🙂', '😕', '😢']
Các loại
| Ký tự | Ý nghĩa |
|---|---|
[xyz]
|
Character class: Khớp với bất kỳ ký tự nào trong số các ký tự được bao quanh. Bạn có thể chỉ định một phạm vi ký tự bằng cách sử dụng dấu gạch ngang, nhưng nếu dấu gạch ngang xuất hiện ở đầu hoặc cuối các ký tự được bao quanh bởi dấu ngoặc vuông, nó được coi là dấu gạch ngang literal được đưa vào character class như một ký tự thông thường.
Ví dụ,
Ví dụ,
Ví dụ,
Khi cờ |
|
|
Negated character class:
Khớp với bất cứ thứ gì không nằm trong dấu ngoặc vuông. Bạn có thể chỉ định phạm vi
ký tự bằng cách sử dụng dấu gạch ngang, nhưng nếu dấu gạch ngang xuất hiện ở vị trí
đầu tiên sau Lưu ý: Ký tự ^ cũng có thể chỉ ra đầu đầu vào. |
. |
Wildcard:
Khớp với bất kỳ ký tự đơn nào ngoại trừ ký tự kết thúc dòng:
|
\d |
Digit character class escape:
Khớp với bất kỳ chữ số nào (chữ số Arabic). Tương đương với |
\D |
Non-digit character class escape:
Khớp với bất kỳ ký tự nào không phải chữ số (chữ số Arabic). Tương đương
với |
\w |
Word character class escape:
Khớp với bất kỳ ký tự chữ và số nào từ bảng chữ cái Latin cơ bản,
bao gồm cả dấu gạch dưới. Tương đương với |
\W |
Non-word character class escape:
Khớp với bất kỳ ký tự nào không phải ký tự từ từ bảng chữ cái Latin cơ bản. Tương đương với |
\s |
White space character class escape:
Khớp với một ký tự khoảng trắng đơn, bao gồm dấu cách, tab, form
feed, line feed, và các khoảng trắng Unicode khác. Tương đương với
|
\S |
Non-white space character class escape:
Khớp với một ký tự đơn không phải khoảng trắng. Tương đương với
|
\t |
Khớp với tab ngang. |
\r |
Khớp với carriage return. |
\n |
Khớp với linefeed. |
\v |
Khớp với tab dọc. |
\f |
Khớp với form-feed. |
[\b] |
Khớp với backspace. Nếu bạn đang tìm assertion ranh giới từ
(\b), xem
Assertions.
|
\0 |
Khớp với ký tự NUL. Không theo sau ký tự này bằng một chữ số khác. |
\cX
|
Khớp với ký tự điều khiển sử dụng
caret notation, trong đó "X" là một chữ cái từ A–Z hoặc a–z (tương ứng với code points
|
\xhh
|
Hex escape:
Khớp với ký tự có mã hh (hai
chữ số thập lục phân).
|
\uHHHH
|
Unicode escape:
Khớp với UTF-16 code-unit có giá trị
HHHH (bốn chữ số thập lục phân).
|
\u{H…H}
|
Unicode code point escape:
(Chỉ khi cờ u được đặt.) Khớp với ký tự có
giá trị Unicode U+H…H (1 đến 6 chữ số thập lục phân).
|
\p{UnicodeProperty},
\P{UnicodeProperty}
|
Unicode character class escape: Khớp với một ký tự dựa trên thuộc tính Unicode của nó: ví dụ, ký tự emoji, hoặc ký tự katakana tiếng Nhật, hoặc ký tự Han/Kanji Trung Quốc/Nhật Bản, v.v.). |
\ |
Chỉ ra rằng ký tự tiếp theo nên được xử lý đặc biệt, hoặc "escaped". Nó có một trong hai hành vi.
Lưu ý: Để khớp với ký tự này theo nghĩa đen, hãy escape nó
với chính nó. Nói cách khác, để tìm kiếm |
x|y
|
Disjunction:
Khớp với "x" hoặc "y". Mỗi thành phần, được phân tách bởi ký tự pipe (
Lưu ý: Disjunction là một cách khác để chỉ định "một tập hợp các lựa chọn", nhưng nó không phải là một character class. Disjunctions không phải là atoms — bạn cần sử dụng một group để biến nó thành một phần của mẫu lớn hơn. |
Ví dụ
>Tìm kiếm một chuỗi chữ số
Trong ví dụ này, ta khớp một chuỗi 4 chữ số với \d{4}. \b chỉ ra ranh giới từ (tức là không bắt đầu hoặc kết thúc khớp ở giữa một chuỗi số).
const randomData = "015 354 8787 687351 3512 8735";
const regexpFourDigits = /\b\d{4}\b/g;
console.table(randomData.match(regexpFourDigits));
// ['8787', '3512', '8735']
Xem thêm ví dụ trong tài liệu tham khảo character class escape.
Tìm kiếm một từ (từ bảng chữ cái Latin) bắt đầu bằng A
Trong ví dụ này, ta khớp một từ bắt đầu bằng chữ A. \b chỉ ra ranh giới từ (tức là không bắt đầu khớp ở giữa một từ). [aA] chỉ ra chữ cái "a" hoặc "A". \w+ chỉ ra bất kỳ ký tự nào từ bảng chữ cái Latin, nhiều lần (+ là một quantifier). Lưu ý rằng vì ta đã khớp cho đến khi không còn ký tự từ nào nữa, ranh giới \b cuối không cần thiết.
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']
Xem thêm ví dụ trong tài liệu tham khảo character class escape.
Tìm kiếm một từ (từ ký tự Unicode)
Thay vì bảng chữ cái Latin, ta có thể sử dụng một phạm vi ký tự Unicode để xác định một từ (do đó có thể xử lý văn bản bằng các ngôn ngữ khác như tiếng Nga hoặc tiếng Ả Rập). "Basic Multilingual Plane" của Unicode chứa hầu hết các ký tự được sử dụng trên thế giới và ta có thể sử dụng character classes và phạm vi để khớp các từ được viết bằng những ký tự đó.
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));
["Приключения", "Алисы", "в", "Стране", "чудес"];
Xem thêm ví dụ trong tài liệu tham khảo Unicode character class escape.
Đếm nguyên âm
Trong ví dụ này, ta đếm số nguyên âm (A, E, I, O, U, Y) trong một đoạn văn bản. Cờ g được dùng để khớp tất cả các lần xuất hiện của mẫu trong văn bản. Cờ i được dùng để làm mẫu không phân biệt chữ hoa chữ thường, do đó nó khớp cả nguyên âm chữ hoa và chữ thường.
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
Xem thêm
- Hướng dẫn Regular expressions
- Hướng dẫn Assertions
- Hướng dẫn Quantifiers
- Hướng dẫn Groups and backreferences
RegExp- Tài liệu tham khảo Regular expressions
- Character class:
[...],[^...] - Character class escape:
\d,\D,\w,\W,\s,\S - Character escape:
\n,\u{...} - Disjunction:
| - Unicode character class escape:
\p{...},\P{...} - Wildcard:
.