Bỏ qua đến nội dung chính
FreeOnlineTools Go
Tiếng Việt
Thẩm quyền giải quyết

Bảng tra cứu Biểu thức Chính quy: Cú pháp, Flag và Mẫu Phổ biến

Bởi FreeOnlineTools Team · Đã cập nhật 2026-08-28

Trả lời nhanh

Regex kết hợp literal character, metacharacter (., \d, \w, \s), quantifier (*, +, ?, {n,m}), anchor (^, $, \b) và group ((...), [...]). Flag như g (global), i (case-insensitive), m (multiline) đổi hành vi match. Test pattern live với Regex Tester.

Giới thiệu

Regular expression (regex) mô tả pattern văn bản bằng ngôn ngữ formal compact. Được hỗ trợ bởi mọi ngôn ngữ lập trình, editor và search tool hiện đại. Cheat sheet này là tham chiếu syntax định nghĩa bởi ECMAScript plus pattern phổ biến bạn có thể copy và adapt. Dùng Regex Tester để thử pattern với văn bản mẫu.

Từng bước một

  1. Các lớp ký tự — khớp với một tập hợp các ký tự

    [abc] khớp với a, b hoặc c. [^abc] khớp với mọi thứ ngoại trừ a, b, c. [a-z] khớp với bất kỳ chữ cái viết thường nào. Các lớp được xác định trước: \d = [0-9], \D = không có chữ số, \w = [A-Za-z0-9_], \W = không phải từ, \s = khoảng trắng, \S = không có khoảng trắng, . = bất kỳ ký tự nào ngoại trừ dòng mới (sử dụng cờ s để bao gồm dòng mới).

  2. Định lượng—lặp lại bao nhiêu lần

    * = 0 trở lên. + = 1 hoặc nhiều hơn. ? = 0 hoặc 1. {n} = chính xác là n. {n,} = ít nhất là n. {n,m} = giữa n và m. Thêm vào ? để khớp lười (ví dụ: *? khớp càng ít càng tốt). Tham lam là mặc định và có thể gây ra sự quay lui thảm khốc trên các mẫu lồng nhau.

  3. Điểm neo và ranh giới — nơi phù hợp

    ^ khớp với phần đầu của chuỗi (hoặc dòng có cờ m). $ khớp với phần cuối. \b khớp với ranh giới từ (giữa \w và \W). \B khớp với ranh giới không phải từ. Các neo có độ rộng bằng 0 —chúng kiểm tra vị trí mà không tiêu tốn ký tự.

  4. Nhóm và luân phiên

    (abc) là nhóm bắt giữ; sử dụng $1, $2 để thay thế. (?:abc) là một nhóm không bắt giữ. (?=abc) là một cái nhìn về phía trước (khẳng định những gì tiếp theo). (?!abc) là một cái nhìn tiêu cực. (?<=abc) là một cái nhìn phía sau (ES2018+). a|b là luân phiên (a hoặc b).

  5. Cờ —thay đổi hành vi khớp

    g = toàn cầu (tìm tất cả kết quả phù hợp, không chỉ kết quả đầu tiên). i = không phân biệt chữ hoa chữ thường. m = multiline (^ và $ khớp với ranh giới dòng). s = dotAll (. khớp với dòng mới). u = unicode (coi mẫu dưới dạng điểm mã Unicode; cần thiết cho biểu tượng cảm xúc và ký tự thiên văn). y = dính (chỉ khớp ở LastIndex).

Ví dụ

Khớp địa chỉ email (thực tế, RFC 5322 được đơn giản hóa)

đầu vào: Pattern: /^[^\s@]+@[^\s@]+\.[^\s@]+$/

đầu ra: Khớp 'user@example.com' và 'a.b@sub.domain.co' nhưng không khớp với 'plainaddress' hoặc '@no-user.com'

Trích xuất tất cả mã màu hex từ CSS

đầu vào: Pattern: /#[0-9a-fA-F]{3,8}\b/g

đầu ra: In 'color: #fff; background: #1a2b3c4d' finds ['#fff', '#1a2b3c4d']

Xác thực ngày ISO 8601 (YYYY-MM-DD)

đầu vào: Pattern: /^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$/

đầu ra: Khớp '2026-08-28' nhưng từ chối '2026-13-01' và '2026-02-31'

Thay thế các chữ số bằng # bằng cách sử dụng nhóm chụp

đầu vào: 'Đơn hàng 42 đã được vận chuyển' được thay thế bằng /(\d+)/g →'#$1'

đầu ra: 'Đơn hàng số 42 đã được giao'

Các vấn đề thường gặp

  • Bộ định lượng tham lam khớp quá nhiều: '<.*>' trên '<a><b>' khớp với toàn bộ chuỗi '<a><b>' thay vì '<a>'. Trước tiên hãy sử dụng '<.*?>' (lười biếng) để khớp với '<a>'.
  • Quay lui thảm khốc: các bộ định lượng lồng nhau như (a+)+b trên đầu vào 'aaaaaaaaaaaaaaaa!' có thể mất thời gian theo cấp số nhân. Viết lại mẫu hoặc sử dụng nhóm nguyên tử/bộ định lượng sở hữu nếu được hỗ trợ.
  • Quên cờ u cho Unicode: /^.$/ khớp với một đơn vị mã duy nhất, vì vậy các biểu tượng cảm xúc như '😀' (hai đơn vị mã) không thành công nếu không có cờ u. Luôn thêm u khi khớp các ký tự thiên văn.
  • Khó hiểu \b (ranh giới từ) với \s (khoảng trắng): \b khớp giữa một từ và ký tự không phải từ, do đó, nó cũng hoạt động ở đầu/cuối chuỗi. \s chỉ khớp với các ký tự khoảng trắng thực tế.

Mẹo

  • Luôn kiểm tra biểu thức chính quy đối với cả mẫu khớp và không khớp trong Trình kiểm tra Regex của chúng tôi trước khi nhúng nó vào mã sản xuất — các trường hợp cạnh rất dễ bị bỏ sót.
  • Ưu tiên các lớp ký tự [a-z] thay vì xen kẽ (a|b|...|z) đối với các ký tự đơn — các lớp nhanh hơn và rõ ràng hơn.
  • Sử dụng các nhóm không thu nạp (?:...) khi bạn không cần giá trị thu nạp — việc thu nạp có chi phí hiệu năng nhỏ và làm lộn xộn mảng kết quả.
  • Biên dịch biểu thức chính quy một lần với new RegExp() hoặc một nghĩa đen ở phạm vi mô-đun, không phải bên trong một vòng lặp nóng — việc biên dịch lại cùng một mẫu trên mỗi lần lặp lại sẽ gây lãng phí CPU.

Công cụ liên quan

Hướng dẫn liên quan

Tài liệu tham khảo