Công Cụ Này Là Gì?
Biểu thức chính quy (regex) là một ngôn ngữ mẫu gọn nhẹ để tìm kiếm, xác thực và trích xuất văn bản: một mẫu email có thể xác thực dữ liệu nhập biểu mẫu, \d{4}-\d{2}-\d{2} tìm ngày tháng, và nhóm bắt lấy ra đúng phần bạn cần. Hầu hết mọi ngôn ngữ lập trình và trình soạn thảo đều hỗ trợ regex.
Công cụ kiểm tra này dùng engine regex của JavaScript — cùng engine chạy trong Node.js và mọi trình duyệt — nên các mẫu bạn xây dựng ở đây hoạt động giống hệt trong code JavaScript/TypeScript của bạn. Hầu hết mẫu cũng hoạt động không đổi trong Python, Java và Go.
Tại Sao Nên Dùng?
- Phản hồi trực tiếp: kết quả khớp tô sáng màu vàng ngay khi bạn gõ mẫu.
- Nhóm bắt hiển thị theo từng kết quả khớp — thấy chính xác $1 và $2 sẽ chứa gì.
- Hỗ trợ đầy đủ cờ: g (mọi kết quả khớp), i (không phân biệt hoa thường), m (nhiều dòng), s (dấu chấm khớp cả xuống dòng), u (unicode).
- Thông báo lỗi rõ ràng khi mẫu có lỗi cú pháp.
- Miễn phí và riêng tư — mẫu và văn bản không bao giờ rời khỏi trình duyệt của bạn.
Cách Sử Dụng
- Nhập mẫu của bạn giữa hai ký tự / (không cần tự thoát dấu gạch chéo).
- Điều chỉnh cờ trong ô nhỏ sau dấu / thứ hai — mặc định g tìm mọi kết quả khớp.
- Dán văn bản kiểm tra bên dưới.
- Kết quả khớp tô sáng ngay lập tức; nhóm bắt được liệt kê phía dưới.
- Nếu mẫu không hợp lệ, thông báo lỗi giải thích vấn đề.
Ví dụ
Đầu vào
Mẫu: (\w+)@(\w+)\.com
Văn bản kiểm tra: Liên hệ alice@example.com hoặc bob@test.comĐầu ra
✓ 2 kết quả khớp
#1 nhóm: $1=alice $2=example
#2 nhóm: $1=bob $2=testDấu ngoặc đơn tạo ra các nhóm bắt mà bạn có thể tham chiếu là $1 và $2 khi thay thế.
Mẹo thực tế
- Đang xác thực ô nhập email? ^[^\s@]+@[^\s@]+\.[^\s@]+$ là một mẫu khoan dung bắt được lỗi gõ rõ ràng mà không từ chối các địa chỉ hợp lệ nhưng bất thường — tuân thủ đầy đủ RFC 5322 cần một thư viện, không phải một dòng regex.
- Trích tham số truy vấn từ URL: [?&]([^=]+)=([^&]*) kèm cờ g, sau đó đọc $1/$2 theo từng kết quả khớp thay vì tự tách bằng & và =.
- Sắp dùng một mẫu trong .replace()? Hãy kiểm tra ở đây trước — những gì được tô sáng chính là những gì .replace() sẽ chạm vào, bao gồm cả nhóm bắt.
- Đang phân tích log nhiều dòng (khớp dấu thời gian ở đầu mỗi dòng)? Thêm cờ m để ^ và $ neo theo từng dòng thay vì toàn bộ chuỗi.
- Sao chép một mẫu từ Python hoặc PHP mà nó không khớp ở đây? Kiểm tra nhóm đặt tên (?P<name>...) — JavaScript dùng (?<name>...), không có P — hoặc lượng từ possessive (++, *+), vốn không tồn tại trong regex JavaScript.
Công cụ kiểm tra regex JavaScript, không phải công cụ chung chung
Công cụ này chạy engine RegExp tích hợp sẵn của JavaScript — chính xác đường dẫn code đứng sau str.match(pattern) hoặc pattern.test(str) trong console trình duyệt hoặc Node.js. Điều này khác với kiểm tra bằng PCRE (thứ PHP dùng, và cũng là mặc định của nhiều công cụ kiểm tra regex "đa năng") hoặc module re của Python: JavaScript không có lượng từ possessive hay nhóm atomic, và nhóm bắt đặt tên dùng (?<name>...) thay vì (?P<name>...) của PCRE/Python.
Nếu bạn sắp đưa một mẫu vào JS hoặc TypeScript — xác thực biểu mẫu, khớp route, phân tích log — kiểm tra ở đây có nghĩa là không có sự khác biệt về dạng regex: những gì tô sáng trên trang này chính xác là những gì new RegExp(pattern, flags) khớp lúc chạy thực tế.
Công cụ này phù hợp với quy trình thực tế nào
Kiểm tra regex hiếm khi đứng một mình. Trình tự thông thường: xác nhận mẫu ở đây, chạy .replace() thực tế trong code của bạn, rồi so sánh văn bản trước/sau để chắc chắn việc thay thế làm đúng những gì bạn mong đợi và không gì khác.
Trích xuất dữ liệu có cấu trúc bằng nhóm bắt thường dẫn thẳng đến JSON — định dạng lại kết quả trích xuất để kiểm tra xem nó có được phân tích đúng như mong đợi không.
Câu Hỏi Thường Gặp
Công cụ kiểm tra này dùng dạng regex nào?
JavaScript (ECMAScript), engine trong mọi trình duyệt và Node.js. Cú pháp cốt lõi có thể mang sang nơi khác, nhưng một số tính năng khác nhau giữa các ngôn ngữ — ví dụ hỗ trợ lookbehind và cú pháp nhóm đặt tên khác nhau trong Python và Java.
Tại sao mẫu của tôi chỉ tìm được kết quả khớp đầu tiên?
Thiếu cờ g (global). Không có g, regex dừng lại sau kết quả khớp đầu tiên. Công cụ này mặc định dùng g — kiểm tra xem bạn có vô tình xóa nó không.
Tại sao . không khớp với dấu xuống dòng trong văn bản của tôi?
Mặc định, . khớp với mọi ký tự trừ dấu xuống dòng. Thêm cờ s (dotall) để . cũng khớp với dấu xuống dòng, hoặc dùng [\s\S] như một giải pháp thay thế mang tính di động hơn.
Kết quả nhóm bắt nghĩa là gì?
Mỗi cặp dấu ngoặc đơn trong mẫu của bạn bắt lấy đoạn văn bản nó khớp được. $1 là nhóm đầu tiên, $2 là nhóm thứ hai, và cứ thế — đây là những gì bạn tham chiếu trong thao tác thay thế và code trích xuất.
Tại sao regex của tôi chạy chậm hoặc bị treo?
Có thể là do backtracking thảm khốc, gây ra bởi các lượng từ lồng nhau như (a+)+ trên đầu vào không khớp. Hãy viết lại mẫu để tránh sự lặp lại mơ hồ. Công cụ này giới hạn tối đa 1000 kết quả khớp để duy trì tốc độ phản hồi.