logo
GeekFormat

Công cụ kiểm tra Regex

Regex Tester
//
无匹配
Worker · 500ms 超时中断
分类模板库
点选即可填充 pattern / flags / demo
测试文本37
匹配详情
0

还没有匹配结果

输入正则与文本后,这里会展示每个匹配、捕获组和命名分组。

匹配高亮预览· Hover / 点击右侧条目联动
Ada Lovelace Alan Turing Grace Hopper

统计

匹配数量
0
执行耗时
0ms
捕获组
0
命名分组
0

命名分组汇总

当前没有命名分组。

Công cụ kiểm tra biểu thức chính quy (Regex Tester) trực tuyến miễn phí, hỗ trợ kiểm tra so khớp thời gian thực JS, xem nhóm bắt/nhóm đặt tên, xem trước thay thế, giải thích cú pháp regex, tích hợp bảo vệ timeout chống ReDoS Web Worker, kèm thư viện mẫu regex phổ biến, phù hợp cho nhà phát triển debug và xác minh regex nhanh chóng.

Đề xuất Liên quan

Trường hợp sử dụng

  • Kiểm tra trực tuyến regex email, số điện thoại, số CMND, URL có chính xác không khi phát triển quy tắc xác thực biểu mẫu
  • Sử dụng regex trích xuất dấu thời gian, thông tin lỗi, địa chỉ IP trong log cấp ERROR/INFO khi phân tích log
  • Xem trước hiệu ứng thay thế regex khi làm sạch dữ liệu/ETL, như chuyển đổi định dạng ngày tháng, ẩn thông tin nhạy cảm (dấu sao ở giữa số điện thoại)
  • Xác minh regex trích xuất nội dung có khớp chính xác với đoạn HTML hoặc trường JSON mục tiêu khi viết trình thu thập dữ liệu web
  • Hiểu ý nghĩa của mỗi ký tự đặc biệt và lượng tử thông qua bảng「Giải thích」khi học biểu thức chính quy, kết hợp với mẫu nhanh chóng thành thạo
  • Gửi regex còn nghi ngờ cho đồng nghiệp qua liên kết chia sẻ khi Code Review, cùng debug tối ưu

Tính năng

  • Thực thi sandbox Web Worker: Regex chạy trong luồng Worker độc lập, timeout 500ms tự động ngắt, ngăn chặn hoàn toàn ReDoS làm treo trình duyệt
  • So khớp thời gian thực + tô màu: Nhập tức thì hiển thị kết quả khớp, các kết quả khác nhau được tô màu bằng 5 màu phân biệt, hover liên kết với bảng chi tiết
  • Nhóm bắt + nhóm đặt tên: Mỗi kết quả khớp tự động mở rộng hiển thị tất cả nhóm bắt($1/$2) và nhóm đặt tên($<name>), và tổng hợp thống kê
  • Xem trước thay thế: Nhập chuỗi thay thế xem trước kết quả theo thời gian thực, hỗ trợ nút nhanh cú pháp $1/$&/$`/$'/$<name>
  • Giải thích cú pháp regex: Tự động phân tích biểu thức chính quy, giải thích ý nghĩa cú pháp của ký tự đặc biệt, lượng tử, nhóm, neo theo từng phần tử
  • 12 mẫu phổ biến: Tích hợp 12 mẫu regex tần suất cao như email/URL/số điện thoại/tiếng Trung/IPv4/UUID/ngày tháng/log/thẻ HTML, v.v., điền một cú nhấp
  • Chuyển đổi 6 cờ: Chuyển đổi nút trực quan cờ g/i/m/s/u/y, không cần nhớ cú pháp
  • Liên kết chia sẻ: Một cú nhấp tạo URL chứa pattern/flags/text, sao chép cho đồng nghiệp tái hiện hiện trường kiểm tra trực tiếp
  • Thống kê thực thi: Hiển thị thời gian thực số lượng khớp, thời gian thực thi(ms), tổng số nhóm bắt, số lượng nhóm đặt tên
  • Giới hạn 1500 lần khớp: Tự động cắt ngắn tránh văn bản quá dài làm trang bị chậm, regex lỗi thông báo lỗi cú pháp thân thiện

Cách Sử dụng

  1. Nhập biểu thức chính quy vào ô nhập giữa / / phía trên (không cần tự thêm dấu gạch chéo), nhập cờ vào bên phải (như g、gi、gim) hoặc nhấp nút bên dưới để chuyển đổi
  2. Dán hoặc nhập nội dung văn bản cần so khớp vào vùng「Văn bản kiểm tra」, kết quả khớp sẽ được tô màu theo thời gian thực
  3. Nhấp vào bảng「Chi tiết khớp」bên phải để xem vị trí, nội dung, nhóm bắt và nhóm đặt tên của mỗi kết quả khớp
  4. Chuyển sang tab「Vùng thay thế」, nhập chuỗi thay thế (hỗ trợ tham chiếu $1/$&/$<name>, v.v.), xem trước kết quả thay thế theo thời gian thực
  5. Chuyển sang tab「Giải thích biểu thức」, xem giải thích cú pháp regex từng phần tử được tạo tự động
  6. Khi cần mẫu phổ biến, nhấp vào「Thư viện mẫu phân loại」bên trái chọn mẫu tương ứng điền một cú nhấp; sau khi debug xong nhấp「Chia sẻ」tạo liên kết

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

ReDoS là gì? Tại sao kiểm tra regex cần chống ReDoS?

ReDoS (Regular Expression Denial of Service - Tấn công từ chối dịch vụ bằng biểu thức chính quy) là khi một số biểu thức chính quy được cấu trúc độc hại (như `(a+)+$` khi so khớp với chuỗi dài) sẽ kích hoạt backtracking thảm họa (catastrophic backtracking), làm CPU chiếm 100%, treo trình duyệt hoặc sập máy chủ. Công cụ này sử dụng Web Worker để thực thi so khớp regex trong sandbox, đặt timeout 500ms tự động ngắt, ngay cả khi nhập regex độc hại gây backtracking cũng không làm treo trình duyệt của bạn, đây là tính năng bảo mật cốt lõi của công cụ này.

Sáu cờ g, i, m, s, u, y trong biểu thức chính quy có ý nghĩa gì?

g (global) so khớp toàn cục, tìm tất cả các kết quả thay vì cái đầu tiên; i (ignoreCase) không phân biệt chữ hoa thường; m (multiline) chế độ nhiều dòng, làm ^ và $ khớp với đầu/cuối mỗi dòng; s (dotAll) làm dấu chấm . khớp với tất cả ký tự bao gồm ký tự xuống dòng; u (unicode) chế độ Unicode, xử lý chính xác emoji và ký tự nhiều byte; y (sticky) so khớp dính, khớp chính xác từ vị trí lastIndex. Công cụ này cung cấp nút chuyển đổi trực quan cho 6 cờ, nhấp để bật/tắt theo thời gian thực.

Nhóm bắt và nhóm đặt tên là gì? Cách sử dụng?

Nhóm bắt được bao bằng dấu ngoặc đơn `(pattern)`, sau khi khớp có thể trích xuất chuỗi con thông qua $1, $2, v.v. Nhóm đặt tên dùng cú pháp `(?<name>pattern)`, sau khi khớp có thể tham chiếu qua `$<name>`, mã nguồn dễ đọc hơn. Ví dụ sau khi khớp ngày tháng bằng `(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})`, có thể định dạng lại trong chuỗi thay thế bằng `$<year>年$<month>月$<day>日`. Công cụ này sẽ tự động liệt kê kết quả nhóm bắt và nhóm đặt tên của mỗi lần khớp.

Hỗ trợ cú pháp regex của ngôn ngữ lập trình nào?

Công cụ này dựa trên công cụ RegExp gốc của JavaScript, tương thích phần lớn với cú pháp của các công cụ chính như JS/TypeScript, module Python re, Java java.util.regex, PHP preg_*, Go regexp (đều dựa trên dòng PCRE/Perl), khác biệt chủ yếu ở một số tính năng nâng cao (như cách viết nhóm đặt tên `(?P<name>)` của Python, lookbehind độ dài thay đổi của .NET). 99% regex trong phát triển hàng ngày (xác thực/trích xuất email, số điện thoại, URL, ngày tháng, v.v.) dùng chung giữa các công cụ, có thể kiểm tra trực tiếp trên công cụ này rồi sao chép vào mã nguồn để sử dụng.

Làm thế nào để chia sẻ regex đã kiểm tra cho đồng nghiệp?

Nhấp vào nút「Chia sẻ」trên thanh công cụ phía trên, công cụ sẽ tự động mã hóa biểu thức chính quy, cờ, văn bản kiểm tra hiện tại vào tham số URL, và sao chép liên kết vào bộ nhớ tạm. Đồng nghiệp mở liên kết sẽ thấy trạng thái kiểm tra hoàn toàn giống hệt (pattern+flags+testText), rất phù hợp cho làm việc nhóm và debug từ xa.

Các ký hiệu đặc biệt $1、$&、$`、$' trong chuỗi thay thế có ý nghĩa gì?

Trong chuỗi thay thế: $1、$2... biểu thị nhóm bắt thứ N; $& biểu thị toàn bộ văn bản khớp; $` biểu thị phần trước văn bản khớp; $' biểu thị phần sau văn bản khớp; $$ biểu thị ký tự $ nghĩa đen; $<name> biểu thị nhóm đặt tên. Ví dụ thay thế `(\d{4})-(\d{2})-(\d{2})` bằng `$2/$3/$1` có thể chuyển 2026-03-12 thành 03/12/2026. Vùng thay thế của công cụ này cung cấp nút chèn nhanh cho các ký hiệu đặc biệt này.

Biểu thức chính quy (Regex/RegExp) là gì?

Biểu thức chính quy (Regular Expression, viết tắt Regex/RegExp) là một ngôn ngữ mẫu văn bản mô tả và khớp với một loạt chuỗi phù hợp với quy tắc cú pháp nào đó bằng một chuỗi đơn. Lịch sử của nó có thể truy nguyên về mô hình toán học neuron được đề xuất bởi nhà thần kinh học Warren McCulloch và nhà toán học Walter Pitts vào những năm 1950, sau đó nhà toán học Stephen Kleene vào năm 1956 dựa trên đó đã đề xuất mô tả đại số của「tập hợp chính quy」. Cha đẻ của Unix Ken Thompson vào cuối những năm 1960 lần đầu tiên triển khai biểu thức chính quy trong trình soạn thảo QED, kể từ đó biểu thức chính quy trở thành chức năng cốt lõi của chuỗi công cụ Unix (grep, sed, awk, vi).

Trong các ngôn ngữ lập trình hiện đại, biểu thức chính quy gần như là khả năng tiêu chuẩn — RegExp của JavaScript, module re của Python, java.util.regex của Java, lớp Regex của .NET, gói regexp của Go đều cung cấp hỗ trợ regex. Biểu thức chính quy được áp dụng rộng rãi trong các tình huống như xác thực biểu mẫu (email/số điện thoại/CMND), tìm kiếm và thay thế văn bản (tìm thay thế trình soạn thảo), phân tích log (trích xuất log ERROR), trình thu thập web (trích xuất nội dung HTML), làm sạch dữ liệu (ETL), so khớp định tuyến, lọc đầu vào và bảo mật (quy tắc WAF), v.v.

Khái niệm cốt lõi của biểu thức chính quy bao gồm: lớp ký tự (\d chữ số, \w ký tự từ, \s khoảng trắng), lượng tử (* không hoặc nhiều, + một hoặc nhiều, ? không hoặc một, {n,m} số lần chỉ định), neo (^ đầu, $ cuối, \b ranh giới từ), nhóm ((...) nhóm bắt, (?:...) nhóm không bắt, (?<name>...) nhóm đặt tên), phân nhánh (|), tập hợp ký tự ([a-z]), nhìn xung quanh ((?=...) nhìn trước tích cực, (?!) nhìn trước tiêu cực), v.v. Nắm vững regex có thể nâng cao hiệu quả xử lý văn bản đáng kể, nhưng cũng cần chú ý phòng ngừa các bẫy hiệu suất như ReDoS.

术语表

Regex / RegExp
Viết tắt của Regular Expression (Biểu thức chính quy), một cú pháp chuỗi mô tả mẫu khớp văn bản, dùng để tìm kiếm, thay thế, xác thực văn bản.
Nhóm bắt (Capture Group)
Biểu thức con được bao bằng dấu ngoặc đơn (pattern), kết quả khớp có thể tham chiếu theo vị trí thông qua $1、$2.
Nhóm đặt tên (Named Group)
Nhóm bắt được định nghĩa bằng cú pháp (?<name>pattern), có thể tham chiếu theo tên thông qua $<name>, dễ đọc hơn tham chiếu số.
ReDoS
Regular Expression Denial of Service (Tấn công từ chối dịch vụ bằng regex), gây ra bởi backtracking thảm họa làm thời gian thực thi regex tăng theo cấp số nhân, treo trình duyệt hoặc máy chủ.
Backtracking
Cơ chế của công cụ regex NFA quay lại vị trí trước đó để thử các khả năng khác khi thử khớp thất bại, regex phức tạp có thể gây backtracking cấp số nhân.
Cờ (Flags)
Tham số sửa đổi hành vi khớp regex, phổ biến có g(toàn cục)、i(không phân biệt hoa thường)、m(nhiều dòng)、s(dotAll)、u(Unicode)、y(dính).
Nhìn xung quanh (Lookaround)
Khẳng định không độ rộng, bao gồm nhìn trước tích cực (?=...), nhìn trước tiêu cực (?!...), nhìn sau tích cực (?<=...), nhìn sau tiêu cực (?<!...), chỉ xác định vị trí không tiêu thụ ký tự.
PCRE
Perl Compatible Regular Expressions (Biểu thức chính quy tương thích Perl), một tiêu chuẩn cú pháp regex được sử dụng rộng rãi, được đa số ngôn ngữ như PHP、Java、Python áp dụng.
Web Worker
API luồng nền do trình duyệt cung cấp độc lập với luồng chính, công cụ này dùng nó để thực thi regex trong Worker, ngay cả khi xảy ra ReDoS cũng không chặn UI.
Lượng tử (Quantifier)
Cú pháp chỉ định số lần lặp lại của phần tử trước: *(0 hoặc nhiều)、+(1 hoặc nhiều)、?(0 hoặc 1)、{n}(đúng n lần)、{n,m}(n đến m lần).

Bảng tra cứu nhanh ký tự đặc biệt regex phổ biến

Ký tự đặc biệtÝ nghĩaMinh họa ví dụ
.Bất kỳ ký tự đơn nào (không chứa xuống dòng, dưới cờ s thì chứa xuống dòng)a.c khớp abc、aXc, không khớp a\nc
\dKý tự chữ số, tương đương [0-9]\d{3} khớp 123、456
\wKý tự từ, tương đương [A-Za-z0-9_]\w+ khớp hello_123
\sKý tự khoảng trắng (dấu cách/tab/xuống dòng, v.v.)a\sb khớp a b (dấu cách ở giữa)
^Đầu chuỗi (dưới cờ m thì là đầu dòng)^Hello khớp Hello ở đầu dòng
$Cuối chuỗi (dưới cờ m thì là cuối dòng)end$ khớp end ở cuối dòng
\bRanh giới từ\bcat\b khớp từ cat độc lập, không khớp category
*Phần tử trước lặp lại 0 lần hoặc nhiều lần (tham lam)ab*c khớp ac、abc、abbc
+Phần tử trước lặp lại 1 lần hoặc nhiều lầnab+c khớp abc、abbc, không khớp ac
?Phần tử trước 0 lần hoặc 1 lần (hoặc dùng cho không tham lam/nhìn xung quanh)colou?r khớp color và colour
|Phân nhánh/hoặc, khớp bên trái hoặc bên phảicat|dog khớp cat hoặc dog
[...]Tập hợp ký tự, khớp bất kỳ ký tự nào trong đó[aeiou] khớp bất kỳ nguyên âm nào

Mẫu tra cứu nhanh biểu thức chính quy phổ biến

Mục đíchBiểu thức chính quyCờ đề xuất
Địa chỉ email[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}g
Số điện thoại Trung Quốc đại lục1[3-9]\d{9}g
Liên kết URLhttps?:\/\/[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b[-a-zA-Z0-9()@:%_+.~#?&/=]*gi
Địa chỉ IPv4\b(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\bg
Ngày tháng YYYY-MM-DD\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\d|3[01])g
Số CMND (18 chữ số)[1-9]\d{5}(?:18|19|20)\d{2}(?:0[1-9]|1[0-2])(?:0[1-9]|[12]\d|3[01])\d{3}[\dXx]g
UUID[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-5][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}gi

Code Examples

So khớp và thay thế regex trong JavaScript

// Xác thực định dạng email
const emailRe = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
console.log(emailRe.test('user@example.com')); // true

// Trích xuất nhóm đặt tên (phân tích ngày tháng)
const dateRe = /(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/g;
const text = 'Thời gian họp:2026-03-12,Hạn chót:2026-04-01';
const matches = [...text.matchAll(dateRe)];
for (const m of matches) {
  console.log(m.groups.year, m.groups.month, m.groups.day);
}

// Thay thế:chuyển đổi định dạng ngày YYYY-MM-DD → MM/DD/YYYY
const reformatted = text.replace(dateRe, '$<month>/$<day>/$<year>');
console.log(reformatted);
// Thời gian họp:03/12/2026,Hạn chót:04/01/2026

Sử dụng module re trong Python

import re

# Tìm tất cả các kết quả khớp
text = 'Liên hệ:alice@example.com,bob@test.org'
emails = re.findall(r'[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}', text)
print(emails)  # ['alice@example.com', 'bob@test.org']

# Trích xuất nhóm đặt tên (Python dùng cú pháp ?P<name>)
date_pattern = r'(?P<year>\d{4})-(?P<month>\d{2})-(?P<day>\d{2})'
m = re.search(date_pattern, 'Đăng vào 2026-03-12')
if m:
    print(m.group('year'), m.group('month'), m.group('day'))

# Thay thế:ẩn 4 chữ số giữa số điện thoại
phone_re = r'(1[3-9]\d)\d{4}(\d{4})'
result = re.sub(phone_re, r'\1****\2', 'Số điện thoại:13812345678')
print(result)  # Số điện thoại:138****5678

Sử dụng java.util.regex trong Java

import java.util.regex.*;

class RegexDemo {
    public static void main(String[] args) {
        String text = "Error [2026-03-12 18:05:09] Connection failed";

        // Biên dịch regex (môi trường sản xuất nên cache thể hiện Pattern)
        Pattern p = Pattern.compile(
            "(?<level>INFO|WARN|ERROR)\\s+\\[(?<time>[^\\]]+)\\]\\s+(?<message>.+)"
        );
        Matcher m = p.matcher(text);

        if (m.find()) {
            System.out.println("Cấp độ: " + m.group("level"));
            System.out.println("Thời gian: " + m.group("time"));
            System.out.println("Thông báo: " + m.group("message"));
        }

        // Thay thế tất cả chữ số
        String cleaned = "abc123def456".replaceAll("\\d+", "*");
        System.out.println(cleaned); // abc*def*
    }
}

Authoritative References