Cách dùng Kiểm tra Regex
- Nhập mẫu của bạn giữa hai dấu gạch chéo, hoặc chọn một mẫu trong Mẫu thường dùng. Bạn cũng có thể dán cả literal đầy đủ như
/\d+/g. - Bật/tắt các cờ như
g(tìm tất cả kết quả),i(không phân biệt hoa thường) hoặcm(nhiều dòng). - Dán văn bản vào Chuỗi kiểm tra — mọi kết quả khớp sẽ được tô sáng khi bạn gõ.
- Xem tab Matches để biết vị trí và nhóm bắt, hoặc mở Replace để xem trước kết quả thay thế.
- Nhấn Copy để sao chép regex dạng
/pattern/flags; mẫu và cờ cũng được lưu trên URL trang để bạn chia sẻ.
Kiểm tra regex là gì?
Biểu thức chính quy (regex) là ngôn ngữ mẫu ngắn gọn dùng để tìm kiếm và biến đổi văn bản — kiểm tra trường email, trích xuất ID từ log, đổi tên file hoặc làm sạch dữ liệu. Vì chỉ một ký tự cũng có thể làm thay đổi kết quả khớp, việc thử và sai regex trực tiếp trong mã nguồn rất chậm. Công cụ kiểm tra regex cho bạn thấy ngay mẫu khớp với gì, nhóm bắt nào được điền và kết quả thay thế sẽ ra sao.
Công cụ này dùng chính bộ máy regex JavaScript (ECMAScript) của trình duyệt, nên kết quả giống hệt những gì String.prototype.match, matchAll, replace và RegExp.test trả về trên Chrome, Firefox, Safari, Node.js và Deno. Mẫu được chạy trong worker nền với giới hạn thời gian, nên một mẫu chạy vô hạn cũng không làm đơ trang.
Các cờ regex trong JavaScript
| Cờ | Tên | Tác dụng |
|---|---|---|
g | global | Tìm mọi kết quả khớp thay vì dừng ở kết quả đầu tiên. |
i | ignoreCase | /abc/i khớp với “ABC”. |
m | multiline | ^ và $ khớp với đầu và cuối của từng dòng. |
s | dotAll | . cũng khớp với ký tự xuống dòng. |
u | unicode | Coi cặp surrogate (emoji) là một ký tự và bật các escape thuộc tính \p{…}. |
y | sticky | Chỉ khớp tại vị trí lastIndex — hữu ích khi viết bộ tách token. |
Nhóm bắt, nhóm có tên và thay thế
Dấu ngoặc đơn bắt lấy phần văn bản mà nó khớp. Trong (\d{4})-(\d{2}), nhóm 1 là năm và nhóm 2 là tháng. Nhóm có tên giúp mẫu tự giải thích: (?<year>\d{4}) có thể dùng trong code qua match.groups.year và trong chuỗi thay thế qua $<year>. Ví dụ, thay (?<y>\d{4})-(?<m>\d{2})-(?<d>\d{2}) bằng $<d>/$<m>/$<y> sẽ biến 2026-10-25 thành 25/10/2026. Dùng (?:…) khi bạn muốn nhóm các phần tử mà không bắt lấy chúng.
Backtracking thảm họa
Các mẫu có bộ lượng từ lồng nhau như (a+)+$ hoặc (\w+\s?)*$ có thể mất thời gian theo hàm mũ với đầu vào gần khớp — nguyên nhân kinh điển khiến trình duyệt bị treo và gây lỗ hổng ReDoS trên máy chủ. Nếu một mẫu chạy quá 1,5 giây tại đây, nó sẽ bị dừng và được đánh dấu. Cách khắc phục: làm các nhánh loại trừ lẫn nhau, thay .* bằng lớp phủ định như [^"]*, hoặc neo mẫu bằng ký hiệu đầu/cuối.
Mẹo viết mẫu đáng tin cậy
- Neo các mẫu kiểm tra bằng
^…$, nếu không\d{5}cũng sẽ “hợp lệ” vớiabc123456. - Escape các ký tự đặc biệt khi cần dùng nguyên văn:
\.\?\(\[\$. - Ưu tiên lớp ký tự cụ thể thay vì
.*; chúng nhanh hơn và khớp đúng với ý bạn muốn. - Regex không phù hợp với các định dạng lồng nhau như HTML hay JSON — hãy dùng bộ phân tích cú pháp (hoặc thử JSON Formatter của chúng tôi).
- Cần so sánh văn bản trước và sau khi thay thế toàn bộ? Dán cả hai vào Diff Checker.
Các mẫu regex thường dùng
Các biểu thức chính quy đã được kiểm thử, kèm giải thích và mã mẫu cho JavaScript, Python và PHP:
- Địa chỉ email
- URL (http và https)
- Địa chỉ IPv4
- Số điện thoại Mỹ
- Số điện thoại quốc tế (E.164)
- Mã ZIP Hoa Kỳ
- Mã bưu chính Anh (UK)
- Mã bưu chính Canada
- Ngày (YYYY-MM-DD)
- Regex ngày (MM/DD/YYYY)
- Ngày (DD/MM/YYYY)
- Thời gian (24 giờ HH:MM)
- Thời gian (12 giờ với AM/PM)
- Mã màu hex
- Regex mật khẩu mạnh
- Tên người dùng
- URL slug
- UUID
- Số thẻ tín dụng
- Số An sinh xã hội Mỹ
- Regex tên miền
- Địa chỉ MAC
- Phiên bản ngữ nghĩa (semver)
- Regex ngày giờ ISO 8601
- JSON Web Token (JWT)
- Chuỗi Base64
- Tên file ảnh
- YouTube video ID từ URL
- Tìm tất cả địa chỉ email trong văn bản
- Tìm tất cả URL trong văn bản
- Tìm hashtag
- Tìm @mention
- Khớp thẻ HTML
- Tìm số trong văn bản
- Chỉ chữ số
- Số thập phân
- Regex chỉ chữ cái
- Alphanumeric (chữ và số)
- Xóa khoảng trắng đầu và cuối
- Gộp nhiều khoảng trắng
- Tìm từ trùng lặp
- Xóa thẻ HTML
Câu hỏi thường gặp
Công cụ này dùng loại regex nào?
\A/\Z hay bộ sửa đổi nội tuyến như (?i).Vì sao mẫu của tôi chỉ tìm được một kết quả?
g (global), JavaScript sẽ dừng ở kết quả khớp đầu tiên. Hãy bật g để tìm tất cả — công cụ cũng sẽ nhắc bạn khi cờ này đang tắt.Làm sao để khớp qua nhiều dòng?
m để ^ và $ hoạt động theo từng dòng, và cờ s (hoặc [\s\S]) nếu bạn muốn . cũng khớp với ký tự xuống dòng.Văn bản thử nghiệm của tôi có được lưu hay tải lên không?
Regex nào tốt để kiểm tra địa chỉ email?
^[^\s@]+@[^\s@]+\.[^\s@]+$ (hoặc mẫu “Email address” có sẵn). Các mẫu tuân thủ đầy đủ RFC 5322 rất dài và vẫn không cho bạn biết hộp thư có tồn tại hay không — việc đó cần gửi email xác nhận.