Kiểm tra regex
Kiểm tra pattern với văn bản thật, ngay trên trình duyệt.
| # | Loại | Giá trị | Vị trí |
|---|
Chạy ngay trên trình duyệt. Không có gì bạn nhập vào bị gửi đi đâu cả.
- Tô sáng kết quả khớp trực tiếp
- Nhóm có tên và đánh số
- Chạy an toàn trong worker
Cách kiểm tra một biểu thức chính quy
- Gõ hoặc dán pattern của bạn và chọn các cờ cần dùng.
- Dán văn bản bạn muốn khớp.
- Xem kết quả khớp được tô sáng, bảng nhóm, hoặc xem trước một lần thay thế.
Tra cứu nhanh cú pháp regex
| Pattern | Khớp với |
|---|---|
| \d | Bất kỳ chữ số nào, 0 đến 9 |
| \w | Bất kỳ chữ cái, chữ số hoặc ký tự _ nào |
| \s | Bất kỳ ký tự khoảng trắng nào |
| + | Một hoặc nhiều token trước đó |
| * | Không hoặc nhiều token trước đó |
| ? | Không hoặc một, hoặc làm một lượng từ trở nên lười (lazy) |
| ^ và $ | Đầu và cuối của chuỗi hoặc dòng |
Các tính năng regex của JavaScript
| Tính năng | Cú pháp | Ghi chú |
|---|---|---|
| Nhóm có tên | (?<name>...) | Được hỗ trợ từ ES2018 |
| Lookbehind | (?<=...) và (?<!...) | Được hỗ trợ từ ES2018 |
| Chế độ Unicode | cờ u | Cần thiết cho Unicode property escape như \p{Letter} |
| Không phân biệt hoa thường | cờ i | Cùng ý tưởng như hầu hết ngôn ngữ khác |
Mẹo khi viết pattern
- Escape các ký tự đặc biệt như . ( ) [ ] bằng dấu gạch chéo ngược khi bạn muốn khớp đúng ký tự đó.
- Dùng một nhóm không capture (?:...) khi bạn không cần tham chiếu lại kết quả khớp đó sau này.
- Lượng từ tham lam (greedy) sẽ khớp nhiều nhất có thể. Thêm ? sau nó, như +?, để có kiểu khớp lười dừng ở điểm sớm nhất có thể.
- Hãy kiểm tra cả các trường hợp biên, như chuỗi rỗng hay khoảng trắng thừa, không chỉ văn bản bạn mong đợi sẽ khớp.
Câu hỏi thường gặp về Kiểm tra regex
Vì sao pattern của tôi ngừng phản hồi?
Một số pattern có thể quay lui (backtrack) theo cấp số nhân với một số văn bản nhất định. Việc khớp chạy trong một worker nền với giới hạn 1,5 giây, nên một pattern chạy vô tận sẽ bị dừng thay vì làm treo tab.
Các cờ nghĩa là gì?
g tìm mọi kết quả khớp thay vì chỉ cái đầu tiên, i bỏ qua phân biệt hoa thường, m làm ^ và $ khớp theo từng dòng, s cho phép dấu chấm khớp cả ký tự xuống dòng, u bật chế độ Unicode đầy đủ, y neo việc khớp vào vị trí lastIndex, và d thêm vị trí bắt đầu và kết thúc cho mỗi kết quả khớp.
Ô thay thế có làm thay đổi văn bản kiểm tra của tôi không?
Không. Nó hiện những gì String.replace sẽ tạo ra trong một ô kết quả riêng, nên chuỗi kiểm tra bạn đã gõ vẫn giữ nguyên y hệt.
Nhóm capture có tên có được hỗ trợ không?
Có. Viết một nhóm dạng (?<name>...) và tên đó sẽ hiện cạnh số thứ tự nhóm trong bảng kết quả khớp.
Văn bản của tôi có bị gửi đi đâu không?
Không. Việc khớp chạy trong một worker ngay bên trong tab trình duyệt của bạn, và không có gì bạn gõ rời khỏi trang.
Công cụ dùng loại regex nào?
Engine RegExp gốc của JavaScript trong trình duyệt bạn, chính là engine chạy pattern của bạn nếu bạn đang xây một ứng dụng web hay một script Node.js.
Backtracking thảm khốc (catastrophic backtracking) là gì?
Đó là khi một pattern có các nhóm lặp lồng nhau, như (a+)+b, có thể mất thời gian tăng theo cấp số nhân để báo thất bại chỉ vì đầu vào dài thêm một ký tự. Giới hạn 1,5 giây của worker ở đây bắt được một pattern như vậy trước khi nó có thể làm treo trang.
^ và $ có thể khớp đầu và cuối của từng dòng, không chỉ cả chuỗi không?
Có, hãy bật cờ m (multiline). Nếu không bật, ^ và $ chỉ khớp đúng đầu và cuối của toàn bộ chuỗi kiểm tra.