Kiểm tra Regex
Kiểm tra Regex
Trình kiểm tra Regex: Hỗ trợ kiểm tra biểu thức chính quy với kết quả khớp thời gian thực, điều khiển cờ, nhóm bắt, nhóm đặt tên và xem trước thay thế tức thì. Bao gồm phát hiện rủi ro hiệu suất và bảo vệ hết thời gian — lý tưởng cho xác thực mẫu, trích xuất văn bản và thay thế hàng loạt Mọi xử lý đều diễn ra ngay trong trình duyệt.
/
/g
Tìm kiếm toàn cục
Không phân biệt hoa/thường
Nhiều dòng
Dấu chấm khớp xuống dòng
Chế độ Unicode
Khớp tại vị trí hiện tại
Văn bản kiểm tra
Văn bản thay thế
Kết quả khớp
Nhập một mẫu để bắt đầu khớp
Xem trước thay thế
Bắt đầu nhanh
Tình huống sử dụng phổ biến
Trích xuất ID, email, ngày tháng hoặc mã thông báo tùy chỉnh từ nhật ký và văn bản Sau đó bạn có thể sao chép, tải xuống hoặc xuất kết quả ngay.
Xác thực các định dạng đầu vào của người dùng trước khi tích hợp vào mã Sau đó bạn có thể sao chép, tải xuống hoặc xuất kết quả ngay.
Thay thế hàng loạt nội dung bằng cách sử dụng nhóm chụp và nhóm được đặt tên Sau đó bạn có thể sao chép, tải xuống hoặc xuất kết quả ngay.
Gợi ý sử dụng
Giới hạn & khả năng tương thích
Quyền riêng tư & bảo mật
Câu hỏi thường gặp
Biểu thức chính quy (regex) là ngôn ngữ dùng để mô tả mẫu văn bản. Bạn có thể xem nó như một kiểu "tìm kiếm nâng cao": thay vì tìm một từ cố định, bạn tìm mọi chuỗi phù hợp với một quy tắc.\n\nVí dụ, \\d{4}-\\d{2}-\\d{2} sẽ khớp các ngày ở dạng YYYY-MM-DD, còn [\\w.]+@[\\w.]+ sẽ khớp địa chỉ email. Regex thường được dùng để tìm và trích xuất dữ liệu (như mã lỗi trong log), kiểm tra định dạng (như số điện thoại hoặc email), và thay thế hàng loạt (như đổi định dạng ngày tháng).\n\nHầu hết ngôn ngữ lập trình (JavaScript, Python, Java, Go...) và nhiều công cụ như VS Code, grep, sed đều hỗ trợ regex với cú pháp khá tương đồng. Công cụ này dùng động cơ JavaScript RegExp để bạn thử nhanh và học trực tiếp trên trình duyệt.
Theo mặc định, regex trong JavaScript chỉ trả về kết quả khớp đầu tiên. Đây là hành vi của ngôn ngữ chứ không phải giới hạn của công cụ. Hãy bật cờ g trong thanh cờ để tìm tất cả kết quả khớp.\n\nCũng cần lưu ý sự khác nhau giữa g và y: g sẽ quét toàn bộ văn bản từ đầu đến cuối, còn y (sticky) yêu cầu mỗi lần khớp phải bắt đầu đúng tại vị trí mà lần khớp trước kết thúc. Nếu giữa hai lần khớp có ký tự ngăn cách, y sẽ dừng ngay tại đó. Trong đa số trường hợp, chỉ bật g là đủ.
Có bốn nguyên nhân phổ biến:\n\n1. Ngoặc chưa khép cặp: mỗi ( phải có ) tương ứng, và mỗi [ phải có ] tương ứng. Trình soạn thảo có thể tự bổ sung, nhưng ở đây bạn cần tự đảm bảo cặp ngoặc hợp lệ.\n2. Bộ lượng tử đặt sai chỗ: các ký hiệu *, +, ?, {n} phải đứng sau một phần tử có thể lặp. Những chuỗi như *+ hoặc ?* là không hợp lệ, trừ khi dấu ? đứng sau để tạo kiểu khớp không tham lam như *?.\n3. Ký tự escape chưa hoàn chỉnh: một dấu \\ đứng đơn lẻ ở cuối mẫu là không hợp lệ; nó phải đi kèm một ký hiệu cụ thể như \\d, \\n hoặc \\\\.\n4. Thuộc tính Unicode cần cờ u: các cú pháp như \\p{L} hoặc \\p{Script=Han} sẽ báo lỗi nếu bạn chưa bật cờ u. Hãy bật cờ u rồi thử lại.
Đây là các ký hiệu tham chiếu trong chuỗi thay thế do JavaScript String.prototype.replace() hỗ trợ:\n\n- $1, $2, ..., $99: nội dung được bắt bởi nhóm bắt thứ n (...)\n- $&: toàn bộ đoạn văn bản khớp\n- $`: phần văn bản nằm trước đoạn khớp\n- $': phần văn bản nằm sau đoạn khớp\n- ${name}: nội dung được bắt bởi nhóm đặt tên (?<name>...)\n\nVí dụ, mẫu (\\w+)\\s(\\w+) khớp với "hello world" và chuỗi thay thế $2-$1 sẽ cho ra "world-hello". Nếu muốn chèn ký tự $ theo nghĩa đen vào chuỗi thay thế, hãy dùng $$ để escape.
Hiện tượng hết thời gian gần như luôn do "catastrophic backtracking" gây ra. Khi động cơ regex gặp các bộ lượng tử lồng nhau như (a+)+b hoặc các nhánh tùy chọn chồng lấn, nó phải thử lùi lại qua số lượng tổ hợp tăng theo cấp số nhân, khiến thời gian khớp tăng vọt.\n\nMột số mẫu nguy hiểm thường gặp là (a+)+, (.*?)*, (.+)+$... Cách xử lý:\n1. Thay dấu . bằng lớp ký tự chính xác hơn, ví dụ dùng [^\\s]+ thay cho .+\n2. Tránh lượng tử lồng nhau, chẳng hạn đổi (a+)+ thành a+\n3. Giảm các nhánh tùy chọn chồng lấn, ví dụ đổi (a|ab)+ thành a+b?\n\nSau khi chỉnh mẫu, hãy bấm "Thử lại" trong khu vực kết quả khớp. Công cụ này có cơ chế ngắt sau 4 giây nên sẽ không làm treo trình duyệt.
Cùng một regex có thể cho kết quả khác nhau giữa các ngôn ngữ vì động cơ regex không hoàn toàn giống nhau. Khác biệt thường nằm ở ba nhóm chính:\n\n1. Mức hỗ trợ cú pháp: JavaScript không hỗ trợ các mẫu đệ quy kiểu PCRE (?R), nhánh điều kiện (?(cond)yes|no) hay nhóm nguyên tử (?>...). Mô-đun re của Python cũng không có các tính năng này, trong khi Java hỗ trợ nhóm nguyên tử nhưng không hỗ trợ đệ quy.\n2. Cách xử lý Unicode: Python 3 coi \\w và \\d là Unicode theo mặc định, còn JavaScript mặc định nghiêng về ASCII trừ khi bạn bật cờ u. Vì vậy \\w có thể không khớp chữ CJK và \\b cũng không hoạt động như mong đợi giữa các ký tự Đông Á.\n3. Ngữ nghĩa xuống dòng: trong Python và JavaScript, dấu . mặc định không khớp \\n, còn Java cần Pattern.DOTALL để đạt hành vi tương tự cờ s của JavaScript.\n\nBạn có thể dùng công cụ này để kiểm tra nhanh logic, nhưng trước khi đưa vào sản phẩm vẫn nên xác nhận lại bằng đúng động cơ regex của ngôn ngữ mục tiêu.