Kiểm thử Regex
Thử regex JavaScript trực tiếp với mọi cờ (g i m s u y d): tô sáng kết quả khớp, nhóm bắt và nhóm có tên, vị trí và xem trước thay thế. Worker chống treo.
Dùng engine regex JavaScript (ECMAScript) của trình duyệt trong một worker chạy nền. Cú pháp của PCRE/Python như lượng từ chiếm hữu hay bộ sửa (?i) nội tuyến có thể không được hỗ trợ.
Kiểm thử Regex là gì?
Kiểm thử một biểu thức chính quy JavaScript trên văn bản của bạn ngay khi gõ. Kết quả khớp được tô sáng, một bảng hiển thị từng kết quả khớp kèm vị trí, các nhóm bắt đánh số và nhóm có tên (cùng chỉ số vị trí của nhóm khi dùng cờ d), và phần xem trước thay thế tùy chọn cho thấy kết quả của String.replace. Biểu thức chạy trong một worker nền bị dừng sau 1,5 giây, nên những mẫu gây quay lui thảm họa không thể làm treo trang.
Cách sử dụng Kiểm thử Regex
- Nhập mẫu (không có dấu gạch chéo) vào ô Biểu thức chính quy.
- Tích các cờ cần dùng: g, i, m, s, u, y, d.
- Dán văn bản cần tìm vào ô Chuỗi kiểm tra – kết quả khớp tự động cập nhật.
- Tích Thay thế kết quả khớp bằng… và nhập chuỗi thay thế (với $1, $<name>, $& …) để xem trước kết quả.
Ví dụ
Pattern (?<y>\d{4})-(\d{2}) with flags g, text "a 2024-05 b 1999-12", replacement $2/$<y> 2 match(es) · replaced: a 05/2024 b 12/1999
Khi nào nên dùng Kiểm thử Regex
Dùng công cụ để viết và gỡ lỗi regex cho JavaScript, TypeScript và Node.js, cũng như cho quy tắc kiểm tra dữ liệu hay tìm và thay thế. Các engine khác (PCRE, Python, Java, .NET, POSIX) khác nhau về cú pháp và tính năng – ví dụ lượng từ sở hữu (possessive), bổ ngữ nội tuyến như (?i) và neo \A/\Z không có ở đây – nên hãy thử trên engine đó khi bạn nhắm tới chúng.
Kiểm thử Regex hoạt động như thế nào
Mẫu được biên dịch bằng new RegExp(pattern, flags) bên trong một Web Worker. Với cờ g hoặc y, công cụ lặp exec() và thu thập tối đa 1.000 kết quả khớp (kết quả khớp rỗng tiến thêm một điểm mã để tránh vòng lặp vô hạn); không có các cờ đó thì chỉ kết quả khớp đầu tiên được báo, đúng như JavaScript. Mỗi kết quả ghi lại vị trí bắt đầu và kết thúc, các nhóm bắt, nhóm có tên và, với cờ d, indices cho từng nhóm. Phần xem trước thay thế chạy text.replace(regex, replacement). Nếu worker không phản hồi trong 1.500 ms, nó bị dừng và thông báo hết thời gian được hiển thị.
Các Trường Hợp Sử Dụng Phổ Biến
- Gỡ lỗi mẫu kiểm tra dữ liệu nhập trong biểu mẫu
- Trích xuất dữ liệu bằng nhóm bắt có tên
- Xem trước thao tác tìm và thay thế trước khi chạy trên tệp
- Tìm hiểu cách các cờ như m, s và u thay đổi việc so khớp
- Kiểm tra mẫu có gây quay lui thảm họa không
Câu Hỏi Thường Gặp
Vì sao regex của tôi chỉ tìm thấy kết quả đầu tiên?
Không có cờ g (toàn cục), JavaScript dừng sau kết quả khớp đầu tiên. Tích g để liệt kê mọi kết quả.
Cờ d có tác dụng gì?
Nó thêm indices vào mỗi kết quả khớp, cho biết vị trí bắt đầu và kết thúc của từng nhóm bắt. Công cụ hiển thị chúng cạnh mỗi nhóm.
Điều gì xảy ra với mẫu thảm họa như (a+)+$?
Worker chạy mẫu đó bị dừng sau 1,5 giây và bạn thấy thông báo hết thời gian thay vì một tab bị treo.
Có tương thích với regex PCRE hay Python không?
Phần lớn với cú pháp cơ bản, nhưng không hoàn toàn. Công cụ dùng engine ECMAScript của trình duyệt.