Thêm game tại WuGames.ioTài trợKhám phá kho game trình duyệt miễn phí — chơi ngay, không tải, không đăng ký.Chơi ngay

Kiểm Tra Regex

Công cụ kiểm tra regex trực tuyến miễn phí với khớp trực tiếp, nhóm có tên, lookahead/lookbehind và chế độ thay thế dùng token $1 và $.

Kiểm Tra Regex - Test và Debug Biểu Thức Chính Quy Trực Tuyến

Công cụ kiểm tra biểu thức chính quy mạnh mẽ giúp bạn test, debug và học regex patterns. Tính năng khớp thời gian thực với syntax highlighting, hiển thị capture groups, hỗ trợ đầy đủ cờ regex của JavaScript và thông tin chi tiết về kết quả khớp. Hoàn hảo cho developers và những ai làm việc với pattern matching.

Biểu thức chính quy là gì và dùng để làm gì?

Biểu thức chính quy (regex hoặc regexp) là một chuỗi ký tự định nghĩa mẫu tìm kiếm, dùng cho việc đối sánh chuỗi, kiểm tra, trích xuất và thay thế. Khái niệm được Stephen Kleene chính thức hóa vào những năm 1950 và được Ken Thompson đưa vào thực tế qua lệnh grep năm 1968. Các bộ máy regex hiện đại hỗ trợ kiểm tra đầu vào (email, số điện thoại, mã bưu chính), phân tích log, tìm và thay thế trong trình soạn thảo, định tuyến URL trong framework web, và phân tích từ vựng trong trình biên dịch. Mọi ngôn ngữ lớn đều có bộ máy regex: RegExp của JavaScript, re của Python, Pattern của Java, Regex của .NET, và PCRE trong PHP. Tuy cú pháp khác nhau giữa các phiên bản (POSIX BRE, ERE, PCRE, RE2, ECMAScript), nhưng các khối cơ bản — lớp ký tự, định lượng, neo, nhóm và phép tuyển — đều phổ quát.

Khác biệt giữa định lượng tham lam, lười và sở hữu là gì?

Mặc định, các định lượng như *, +, ? và {n,m} là tham lam: chúng khớp càng nhiều càng tốt miễn là mẫu tổng thể vẫn thành công. Mẫu <.+> với <b>đậm</b> sẽ khớp toàn bộ chuỗi, không chỉ <b>, vì + ngấu nghiến đến tận dấu > cuối cùng. Định lượng lười (không tham lam) thêm ? — <.+?> chỉ khớp <b>, lấy chuỗi con nhỏ nhất hoạt động được. Định lượng sở hữu thêm + (++, *+, ?+) và không bao giờ quay lui sau khi khớp, giúp tăng tốc và ngăn quay lui thảm họa nhưng có thể khiến mẫu thất bại nơi tham lam thành công. PCRE, Java và Ruby hỗ trợ sở hữu; JavaScript và Python thì không (dùng nhóm nguyên tử (?>...) nếu có).

Neo, lookahead và lookbehind là gì?

Neo khớp vị trí chứ không phải ký tự. ^ khớp đầu chuỗi (hoặc đầu dòng ở chế độ multiline), $ khớp cuối, \b khớp ranh giới từ, và \A / \Z khớp đầu / cuối tuyệt đối bất kể chế độ multiline. Lookahead (?=...) và phủ định (?!...) khẳng định cái theo sau vị trí hiện tại mà không tiêu thụ: q(?=u) chỉ khớp q khi theo sau là u. Lookbehind (?<=...) và (?<!...) khẳng định cái đi trước: (?<=\$)\d+ khớp số có dấu đô la trước nó. JavaScript được hỗ trợ lookbehind từ ES2018; trình duyệt cũ và RE2 (dùng bởi Go, Cloudflare) không hỗ trợ. Lookaround là zero-width: ảnh hưởng đối sánh nhưng không đóng góp ký tự vào kết quả.

Nhóm bắt, nhóm không bắt và nhóm có tên khác nhau thế nào?

Dấu ngoặc (abc) tạo nhóm bắt vừa nhóm biểu thức cho định lượng vừa lưu chuỗi con để tham chiếu ngược (\1) hoặc trích xuất. Nhóm không bắt (?:abc) chỉ nhóm mà không lưu, nhanh hơn và không làm rối mảng kết quả — dùng khi chỉ cần nhóm. Nhóm có tên (?<ten>abc) (PCRE/Python/.NET/ES2018+) lưu dưới tên dễ đọc, truy cập qua match.groups.ten, giúp mẫu tự tài liệu. Mẫu (?<nam>\d{4})-(?<thang>\d{2})-(?<ngay>\d{2}) phân tích ngày ISO thành các trường có nhãn. Tham chiếu ngược \k<ten> hoặc \1 cho phép khớp lại cùng văn bản — hữu ích để tìm từ lặp như \b(\w+)\s+\1\b bắt từ trùng.

Làm sao kiểm tra thay thế / thay chuỗi regex với $1 và nhóm có tên?

Bật chế độ Thay Thế / Thay Chuỗi, rồi nhập chuỗi thay thế tham chiếu văn bản đã bắt bằng các token. Trong String.replace của JavaScript (mà công cụ này dùng), $1, $2, $3 chèn nhóm bắt theo vị trí, $<tên> chèn nhóm có tên, $& chèn toàn bộ khớp, $` chèn mọi thứ trước khớp, và $' chèn mọi thứ sau khớp. Ví dụ, mẫu (?<nam>\d{4})-(?<thang>\d{2})-(?<ngay>\d{2}) với chuỗi thay thế $<ngay>/$<thang>/$<nam> viết lại 2026-05-29 thành 29/05/2026 — kiểu đổi định dạng ngày ISO sang DMY kinh điển. Không có cờ global g, chỉ khớp ĐẦU TIÊN được thay (hành vi gốc); thêm g để thay mọi lần xuất hiện. Điều này phản ánh sed s/cũ/mới/g, tìm-và-thay trong trình soạn thảo và quy trình viết lại log, nên bạn có thể tạo và kiểm chứng việc thay thế ở đây trước khi dán vào mã nguồn.

Kiểm Tra Regex — Công cụ kiểm tra regex trực tuyến miễn phí với khớp trực tiếp, nhóm có tên, lookahead/lookbehind và chế độ thay thế dùng
Kiểm Tra Regex

Các cờ phổ biến (g, i, m, s, u, y) làm gì?

Các cờ thay đổi hành vi tổng thể của regex. g (global) trả về mọi khớp thay vì chỉ khớp đầu, cần cho replaceAll trong JavaScript. i (không phân biệt hoa thường) khiến [A-Z] khớp cả a-z. m (multiline) đổi ^ và $ thành ranh giới dòng thay vì chuỗi. s (dotall, ES2018+) cho . khớp cả ký tự xuống dòng. u (unicode) bật chế độ Unicode đầy đủ với cặp đại diện và escape \p{Script=Latin}. y (sticky) neo khớp tại lastIndex, hữu ích cho tokenizer. Python dùng hằng re.IGNORECASE, re.MULTILINE, re.DOTALL thay vì chữ cái cờ. Kết hợp tùy ý: /mau/gim hoặc (?gim) nội tuyến.

Vì sao một số regex làm treo trình duyệt? (quay lui thảm họa)

Quay lui thảm họa xảy ra khi regex thử số lượng cách khớp tăng theo lũy thừa trước khi bỏ cuộc. Ví dụ kinh điển là (a+)+b với aaaaaaaaaaaaaaaaaa (không có b): bộ máy thử mọi phân chia của các a giữa + trong và ngoài, tức 2^n lần thử. Tấn công ReDoS (Từ chối Dịch vụ qua Regex) khai thác điều này — một đầu vào độc có thể đóng băng máy chủ trong nhiều phút. Hướng dẫn ReDoS của OWASP khuyến nghị: tránh định lượng lồng ((a+)+, (a*)*), tránh tuyển chồng lấp ((a|a)+), ưu tiên nhóm nguyên tử (?>a+)+ hoặc định lượng sở hữu a++, và dùng bộ máy thời gian tuyến tính như RE2 (Go, Cloudflare) hoặc crate regex của Rust cho đầu vào không tin cậy. Kiểm tra mẫu bằng debugger của regex101 hoặc linter regexploit trước khi triển khai.

POSIX BRE, ERE, PCRE và RE2 khác nhau thế nào?

POSIX BRE (Cơ bản, dùng bởi sed và grep) yêu cầu dấu xuyệc ngược trước siêu ký tự: \(nhom\), \{2,3\}, \+ là nghĩa đen. POSIX ERE (Mở rộng, dùng bởi egrep, awk) coi những ký tự đó là đặc biệt mặc định — gần với cú pháp hiện đại. PCRE (Tương thích Perl, dùng bởi PHP, NGINX và nhiều công cụ) là chuẩn hiện đại trên thực tế: hỗ trợ lookaround, nhóm có tên, tham chiếu ngược, đệ quy và điều kiện. RE2 (Google, dùng bởi Go, Cloudflare, Sourcegraph) cố ý bỏ tham chiếu ngược và lookaround để đảm bảo thời gian tuyến tính, loại bỏ ReDoS. Regex ECMAScript (JavaScript) gần PCRE nhưng thiếu một số tính năng (đệ quy, điều kiện) và thêm cờ y. Luôn kiểm tra tài liệu bộ máy đích — một mẫu PCRE chạy được có thể thất bại ở RE2 hoặc grep.

Làm sao thoát ký tự đặc biệt và xử lý Unicode đúng cách?

Mười hai siêu ký tự cần thoát bằng dấu xuyệc ngược: . ^ $ * + ? ( ) [ ] { } | \. Để khớp dấu chấm nghĩa đen, dùng \.. Trong lớp [...], chỉ ] \ ^ - cần thoát, và ^ chỉ ở vị trí 1. Với mẫu động xây từ đầu vào người dùng, dùng hàm thoát của thư viện (đề xuất RegExp.escape, re.escape trong Python, preg_quote trong PHP) — không bao giờ nối thẳng đầu vào thô. Cho Unicode, bật cờ u và dùng escape thuộc tính: \p{L} (bất kỳ chữ), \p{N} (số), \p{Script=Han} (chữ Hán), \p{Emoji}. \w cũ chỉ khớp ký tự ASCII mặc định — với tên quốc tế dùng [\p{L}\p{N}_]. Cặp đại diện (emoji, CJK hiếm) chỉ hoạt động đúng với cờ u trong JavaScript.

Tính Năng Chính

  • Kiểm tra biểu thức chính quy với khớp thời gian thực
  • Syntax highlighting cho kết quả khớp
  • Hiển thị tất cả capture groups
  • Hỗ trợ đầy đủ cờ regex của JavaScript (g, i, m, s, u, y)
  • Hiển thị số lượng và vị trí khớp
  • Highlight kết quả khớp trong chuỗi test
  • Thông báo lỗi chi tiết cho mẫu không hợp lệ
  • Chức năng copy và paste
  • Tải file văn bản lên để test
  • Hỗ trợ chế độ tối
  • Xử lý 100% phía client - dữ liệu không rời khỏi trình duyệt
  • Hoạt động offline sau khi tải ban đầu
  • Thiết kế responsive thân thiện với mobile