Thử biểu thức chính quy
Thử regex với tô sáng kết quả khớp và các nhóm ngay khi gõ
Về công cụ này
Viết một mẫu, dán văn bản thử vào, và mọi chỗ khớp được tô sáng ngay khi bạn gõ — kèm nhóm bắt, nhóm đặt tên và vị trí khớp liệt kê ngay bên dưới. Công cụ dùng chính bộ máy RegExp của JavaScript, nên hành vi khớp đúng y như trên Node.js và các trình duyệt, kể cả lookbehind, nhóm đặt tên và escape thuộc tính Unicode.
Các cờ được bật tắt theo từng chữ cái (g, i, m, s, u, y, d) và mẫu được biên dịch lại sau mỗi phím gõ; lỗi cú pháp hiện ra ngay với chính thông báo của bộ máy, không phải chờ tới lúc bạn bấm nút. Những mẫu khớp rỗng như a* được xử lý an toàn, và số kết quả bị chặn ở 10.000 để một dấu .* đi lạc không làm treo tab.
Các phương ngữ regex khác nhau tùy bộ máy — một mẫu chạy tốt ở đây có thể phải chỉnh lại cho PCRE, RE2 hay module re của Python, chủ yếu quanh chuyện hỗ trợ lookbehind, lượng từ chiếm hữu và cờ đặt ngay trong mẫu.
Câu hỏi thường gặp
- Công cụ này dùng phương ngữ regex nào?
- ECMAScript (JavaScript), đúng như bản cài đặt trong trình duyệt của bạn. Nó hỗ trợ lookahead, lookbehind, nhóm bắt đặt tên, tham chiếu ngược và escape thuộc tính Unicode như \p{Letter} (khi bật cờ u). Nó không hỗ trợ cú pháp riêng của PCRE như lượng từ chiếm hữu hay đệ quy.
- Vì sao mẫu của tôi khớp mọi thứ / chẳng khớp gì?
- Hai nguyên nhân kinh điển: một ký tự đặc biệt chưa được thoát (dấu . khớp với mọi ký tự — muốn dấu chấm thật thì viết \.), hoặc quên mất cờ g trong đầu — công cụ này luôn tìm hết mọi kết quả, nhưng mã của bạn sẽ chỉ tìm được kết quả đầu tiên nếu không đặt g.
- Nhóm bắt đặt tên là gì?
- Cú pháp (?<tên>...) gắn nhãn cho một nhóm để bạn đọc kết quả theo tên thay vì theo vị trí: match.groups.tên trong JavaScript. Bảng nhóm bên dưới danh sách kết quả hiển thị cả nhóm đánh số lẫn nhóm đặt tên cho từng chỗ khớp.
- Một regex viết ở đây có chạy nguyên vẹn trong Python hay Go không?
- Thường là được, nhưng không phải luôn luôn. Lớp ký tự, lượng từ và ký tự neo thì dùng chung được; còn lookbehind, cú pháp nhóm đặt tên (Python dùng (?P<tên>...)) và cờ đặt trong mẫu thì khác nhau. Bộ máy RE2 của Go còn từ chối hoàn toàn tham chiếu ngược và các dạng lookaround.