Công Cụ Nhanh

Kiểm tra Regex online

Cờ

Bắt được đa số email thường gặp; không kiểm tra đủ mọi trường hợp của chuẩn RFC 5322.

Văn bản, tô sáng chỗ khớp

2 kết quả khớp

Liên hệ lan.nguyen@congty.vn hoặc support+hd@example.com.vn để được hỗ trợ.

Danh sách kết quả

#Vị tríĐoạn khớpNhóm bắt
18–28lan.nguyen@congty.vn—
234–59support+hd@example.com.vn—

Giải thích từng thành phần

  1. [A-Za-z0-9._%+-]một ký tự thuộc nhóm [A-Za-z0-9._%+-]
  2. +↳ phần ngay trước lặp 1 lần trở lên
  3. @đúng ký tự “@”
  4. [A-Za-z0-9.-]một ký tự thuộc nhóm [A-Za-z0-9.-]
  5. +↳ phần ngay trước lặp 1 lần trở lên
  6. \.đúng ký tự “.” (đã thoát nghĩa đặc biệt)
  7. [A-Za-z]một ký tự thuộc nhóm [A-Za-z]
  8. {2,}↳ phần ngay trước lặp ít nhất 2 lần

Bộ giải thích đơn giản để dễ đọc biểu thức, không thay thế trình biên dịch.

Xử lý ngay trên trình duyệt của bạn. Tệp và dữ liệu không được tải lên máy chủ.

Trả lời nhanh

Regex (biểu thức chính quy) là chuỗi mô tả một mẫu văn bản, ví dụ \d{3,} nghĩa là “từ 3 chữ số liền nhau trở lên”. Nhập biểu thức, chọn cờ (g để tìm tất cả, i để không phân biệt hoa thường) và dán văn bản: chỗ khớp được tô sáng ngay, kèm bảng nhóm bắt và lời giải thích từng thành phần.

Regex là gì?

Công cụ chạy biểu thức bằng chính bộ máy regex JavaScript của trình duyệt (giống JavaScript, TypeScript, Node.js), nên kết quả là kết quả bạn sẽ có trong mã. Mỗi lần gõ, chỗ khớp được tô sáng trong văn bản, bảng bên dưới liệt kê vị trí và từng nhóm bắt ($1, $2, nhóm có tên), phần thay thế cho xem văn bản sau khi đổi. Biểu thức chạy trong Web Worker có giới hạn 1,5 giây, nên một mẫu viết dở kiểu (a+)+ không làm treo trang. Văn bản bạn dán không rời khỏi trình duyệt.

Minh hoạ một dải giấy có hàng ô tròn, kính lúp soi lên làm nổi vài ô màu vàng, bên cạnh là chiếc lược răng không đều tượng trưng cho việc so khớp mẫu

Cách kiểm tra một biểu thức chính quy

  1. 1

    Gõ biểu thức vào ô giữa hai dấu /, không cần viết dấu / ở hai đầu. Hoặc chọn một mẫu có sẵn (email, số điện thoại, CCCD…) để bắt đầu.

  2. 2

    Bật các cờ cần dùng: g để tìm tất cả chỗ khớp, i để không phân biệt chữ hoa thường, m để ^ và $ áp dụng cho từng dòng, u để dùng \p{L} khớp chữ có dấu.

  3. 3

    Dán văn bản cần kiểm tra. Chỗ khớp được tô màu xen kẽ, số kết quả hiện ở góc phải, bảng “Danh sách kết quả” cho vị trí và nhóm bắt.

  4. 4

    Muốn đổi văn bản, bật “Thay thế” và nhập chuỗi thay thế với $1, $2 hoặc $<tên>; kết quả hiện ngay, bấm “Sao chép” để lấy.

  5. 5

    Đọc phần “Giải thích từng thành phần” để kiểm tra biểu thức có đúng ý mình không trước khi dán vào mã.

Ký hiệu regex hay dùng

Ký hiệuÝ nghĩaVí dụ khớp
.Một ký tự bất kỳ (trừ xuống dòng)a.c khớp abc, a-c
\d \w \sChữ số, ký tự chữ (A–Z, 0–9, _), khoảng trắng\d\d khớp 42
[abc] [^abc]Một ký tự trong / ngoài danh sách[aeiou] khớp nguyên âm
* + ?Lặp 0+ lần, 1+ lần, 0 hoặc 1 lầncolou?r khớp color, colour
{n} {n,} {n,m}Lặp đúng n, ít nhất n, từ n đến m lần\d{4} khớp 2026
^ $Đầu và cuối chuỗi (hoặc dòng với cờ m)^Xin khớp đầu câu
(…) (?<tên>…) (?:…)Nhóm bắt, nhóm có tên, nhóm không bắt(\d+)-(\d+) bắt 2 nhóm
a|bHoặc a hoặc bmèo|chó
(?=…) (?!…)Phía sau phải là / không được là\d+(?=đ) khớp số đứng trước chữ đ
\bRanh giới từ\bcat\b không khớp trong concat

\w và \b chỉ hiểu chữ cái A–Z. Với tiếng Việt có dấu, dùng [\p{L}\p{M}]+ và bật cờ u.

Các cờ (flags) của regex JavaScript

CờTác dụngKhi nào bật
gTìm mọi chỗ khớp, không dừng ở chỗ đầu tiênĐếm, liệt kê, thay thế tất cả
iKhông phân biệt chữ hoa thườngTìm từ khoá bất kể cách viết
m^ và $ khớp đầu / cuối từng dòngXử lý văn bản nhiều dòng, log
sDấu . khớp cả ký tự xuống dòngBắt một khối nhiều dòng
uChế độ Unicode: \p{…}, emoji, \u{…}Văn bản tiếng Việt, emoji
yChỉ khớp tại vị trí lastIndexViết bộ phân tích từ vựng

Ví dụ thực tế

Lọc số điện thoại khỏi danh sách khách

Chọn mẫu “Số di động Việt Nam”, dán cột số điện thoại từ Excel: số hợp lệ được tô sáng, số bàn hay số thiếu chữ số không được tô, dễ thấy dòng cần sửa.

Đổi ngày từ dd/mm/yyyy sang yyyy-mm-dd

Biểu thức (\d{2})/(\d{2})/(\d{4}) với cờ g, bật Thay thế và nhập $3-$2-$1: “05/11/2026” thành “2026-11-05”, phù hợp để nhập vào cơ sở dữ liệu.

Tách mã đơn hàng trong email

Mã dạng DH-2026-000123: dùng DH-\d{4}-\d{6}. Bảng kết quả cho vị trí từng mã; muốn chỉ lấy phần số, bọc phần đó trong ngoặc để thành nhóm $1.

Kiểm tra mẫu trước khi đưa vào form

Thuộc tính pattern của thẻ input HTML dùng cùng cú pháp regex JavaScript (tự thêm ^ và $). Thử biểu thức ở đây với vài giá trị đúng và sai trước khi gắn vào trang.

Lỗi thường gặp và cách xử lý

Chỉ thấy một kết quả dù văn bản có nhiều chỗ khớp.
Bật cờ g. Không có g, regex dừng ở chỗ khớp đầu tiên (trong mã: String.match, replace cũng vậy).
\w không khớp chữ “ă”, “đ”, “ơ”.
\w chỉ gồm A–Z, a–z, 0–9 và _. Dùng [\p{L}\p{M}] kèm cờ u, hoặc liệt kê dải ký tự tiếng Việt cụ thể.
Báo “quá thời gian” và dừng.
Bộ lặp lồng nhau như (a+)+, (.*)*, (\w+\s?)* có thể thử hàng tỷ cách khi không khớp (catastrophic backtracking). Viết cụ thể hơn: bỏ lặp lồng, thay .* bằng [^,]* hoặc thêm ký tự neo.
Dấu chấm khớp mọi thứ, kể cả chữ.
Dấu . nghĩa là “một ký tự bất kỳ”. Muốn khớp đúng dấu chấm, viết \. (ví dụ tên miền example\.com).
Biểu thức khớp quá nhiều (lấy cả đoạn dài).
* và + mặc định “tham”, lấy càng nhiều càng tốt. Thêm ? để thành lazy: <.+?> thay vì <.+>.
Chép sang mã thì sai, ở đây lại đúng.
Trong chuỗi JavaScript / Java / C#, dấu \ phải viết thành \\ ("\\d+"). Dạng /\d+/ trong JavaScript thì giữ nguyên. Python, PHP và Go có vài khác biệt cú pháp (nhóm có tên, lookbehind).

Công cụ dùng bộ máy regex nào?

Biểu thức chạy bằng RegExp của trình duyệt theo chuẩn ECMAScript, giống hệt JavaScript và TypeScript ở trình duyệt hay Node.js. Phần lớn cú pháp thông dụng giống PCRE (PHP), Python, Java, nhưng có khác biệt nhỏ: Python viết nhóm có tên là (?P<tên>…), JavaScript là (?<tên>…); Go không hỗ trợ lookbehind và backreference.

Phần giải thích là bộ tách đơn giản viết riêng để người đọc dễ hiểu từng ký hiệu. Nó không thay thế trình biên dịch: kết quả khớp, lỗi cú pháp và thay thế luôn lấy từ chính RegExp của trình duyệt.

Vì sao có giới hạn 1,5 giây

Một số biểu thức có độ phức tạp tăng theo cấp số mũ khi văn bản không khớp. Ví dụ ^(a+)+$ với chuỗi 30 chữ a và một chữ b phải thử hơn một tỷ cách chia. Đây cũng là kiểu lỗi ReDoS từng làm sập nhiều dịch vụ web.

Công cụ chạy biểu thức trong Web Worker và dừng nếu quá 1,5 giây, rồi báo để bạn sửa mẫu. Nếu biểu thức bị dừng ở đây, nhiều khả năng nó cũng chậm khi chạy thật trên máy chủ.

Giới hạn của các mẫu có sẵn

Mẫu email, số điện thoại, CCCD, biển số xe chỉ kiểm tra hình thức để lọc nhanh, không xác minh dữ liệu có thật. Mỗi mẫu có ghi chú giới hạn ngay dưới ô chọn.

  • Số di động: đầu số 03, 05, 07, 08, 09 (hoặc +84), 10 chữ số, không nhận dấu cách giữa các số.
  • CCCD: 12 chữ số, bắt đầu bằng 0; ba số đầu là mã tỉnh nơi đăng ký khai sinh.
  • Email: đủ cho đa số địa chỉ thường gặp, không phủ hết mọi trường hợp của chuẩn RFC 5322.

Thuật ngữ

Regex / biểu thức chính quy
Chuỗi mô tả một mẫu văn bản để tìm, kiểm tra hoặc thay thế.
Cờ (flag)
Tuỳ chọn thay đổi cách khớp: g, i, m, s, u, y.
Nhóm bắt
Phần trong ngoặc ( ) được lưu lại để dùng lại bằng $1, $2… hoặc \1.
Bộ lặp (quantifier)
*, +, ?, {n,m}: số lần phần đứng trước được lặp.
Lookahead / lookbehind
Điều kiện về phía sau / phía trước vị trí khớp mà không đưa vào kết quả.
Backtracking
Cơ chế thử lại cách khớp khác khi gặp ngõ cụt; quá nhiều sẽ làm regex rất chậm (ReDoS).

Câu hỏi thường gặp

Regex ở đây có giống trong PHP, Python không?

Phần lớn giống. Công cụ dùng chuẩn JavaScript (ECMAScript); một số cú pháp như nhóm có tên (?P<tên>) của Python, cờ x của PCRE thì khác. Kết quả trùng khớp 100% với JavaScript / TypeScript / Node.js.

Văn bản tôi dán có bị gửi đi không?

Không. Biểu thức và văn bản được xử lý trong trình duyệt của bạn (Web Worker), không gửi lên máy chủ.

Làm sao khớp chữ tiếng Việt có dấu?

Dùng [\p{L}\p{M}]+ và bật cờ u. \w chỉ hiểu chữ A–Z không dấu.

Vì sao bảng chỉ hiện 200 dòng?

Để trang vẫn nhẹ khi có hàng nghìn kết quả. Đoạn tô sáng và kết quả thay thế vẫn xử lý toàn bộ (tối đa 5.000 chỗ khớp).

$& và $1 khác nhau thế nào?

$& là toàn bộ đoạn khớp, $1 là nội dung nhóm bắt thứ nhất. $<tên> lấy nhóm có tên, $$ chèn một dấu $.

Biểu thức bị dừng vì quá thời gian thì phải làm sao?

Tìm chỗ có bộ lặp lồng nhau hoặc .* đứng cạnh nhau, viết lại cụ thể hơn (giới hạn ký tự, thêm neo ^ $, bỏ lặp lồng).

Đánh giá và bình luận

Đang tải…