Hướng dẫn cách làm
Cách kiểm tra regex mà không cần cài đặt gì
Bạn vừa viết một mẫu và cần biết liệu nó có thực sự khớp với những gì bạn mong đợi trước khi đưa vào mã hay không. Cài một công cụ trên máy hoặc dán một nhật ký riêng tư vào một trang web bất kỳ là quá mức cần thiết, và thường rủi ro. Hướng dẫn này cho biết cách chạy regex trên chính văn bản của bạn ngay trong trình duyệt, bật tắt các cờ làm thay đổi hành vi, đọc các nhóm bắt mà nó trích ra, và xem các kết quả khớp được tô sáng tại chỗ, trong khi mẫu và văn bản không bao giờ rời khỏi tab của bạn.
Từng bước
- Mở công cụ kiểm tra regex và gõ mẫu của bạn vào ô nằm giữa hai dấu gạch chéo. Bạn không tự viết dấu gạch chéo: công cụ hiển thị chúng để bạn thấy mẫu theo cách mà bộ máy đọc nó. Dán văn bản mẫu của bạn vào ô bên dưới, ví dụ vài dòng nhật ký, một danh sách email hay một khối mã mà bạn muốn tìm kiếm.

- Đặt các cờ trong ô nhỏ bên cạnh mẫu. Cờ g tìm mọi kết quả khớp thay vì dừng ở kết quả đầu tiên; i làm cho việc khớp không phân biệt hoa thường; m cho phép các neo ^ và $ khớp với đầu và cuối mỗi dòng thay vì toàn bộ văn bản; s cho phép dấu chấm khớp cả ngắt dòng. Hãy kết hợp chúng tự do, ví dụ gim.
- Nhấn Test. Mỗi kết quả khớp được tô sáng trực tiếp trong văn bản của bạn, và danh sách bên dưới hiển thị mọi kết quả khớp cùng vị trí và giá trị của từng nhóm bắt. Tinh chỉnh mẫu rồi chạy lại: bản xem trước cập nhật để bạn thu hẹp mẫu cho đến khi nó bắt đúng chính xác điều bạn muốn và không gì khác.

Nhóm bắt, có tên và đánh số
Nhóm bắt là phần của mẫu được bọc trong dấu ngoặc đơn, và đó là cách bạn lấy ra một mảnh từ mỗi kết quả khớp thay vì chỉ xác nhận rằng toàn bộ đã khớp. Nhóm đánh số được đếm từ trái sang phải theo dấu ngoặc mở của chúng: trong (\d{4})-(\d{2})-(\d{2}) nhóm 1 là năm, nhóm 2 là tháng, nhóm 3 là ngày. Nhóm có tên dùng cú pháp (?<name>...), nên (?<year>\d{4}) dễ đọc hơn nhiều so với một con số trần khi mẫu lớn dần. Nếu bạn chỉ muốn gom nhóm mà không bắt, ví dụ để áp một bộ lượng từ lên nhiều ký tự, hãy dùng nhóm không bắt (?:...) để nó không làm rối danh sách kết quả. Công cụ kiểm tra hiển thị giá trị của từng nhóm cho mỗi kết quả khớp, đây là cách nhanh nhất để xác nhận bạn đang trích đúng phần.
Khi một mẫu treo hoặc chạy sai
Có hai vấn đề lặp đi lặp lại. Thứ nhất là quay lui thảm họa: một mẫu như (a+)+$ chạy trên một chuỗi dài không khớp có thể khiến bộ máy thử một số lượng đường đi theo cấp số nhân và đóng băng. Công cụ kiểm tra chạy mỗi lần thử trong một Web Worker với bộ canh giờ ngắn, nên thay vì một tab treo, bạn nhận được một thông báo rõ ràng và có thể đơn giản hóa mẫu, thường bằng cách làm cho một bộ lượng từ mang tính chiếm hữu về tinh thần, neo nó lại, hoặc tránh lặp lồng nhau. Thứ hai là khớp tham lam so với khớp lười: theo mặc định .* lấy nhiều nhất có thể, nên để khớp nội dung của một thẻ HTML đơn lẻ bạn muốn dạng lười .*? thay thế. Nếu bạn đang so sánh hai phiên bản hơi khác nhau của một chuỗi để xem mẫu của bạn nên nhắm vào đâu, công cụ so sánh văn bản xếp chúng cạnh nhau để khác biệt trở nên rõ ràng trước khi bạn viết biểu thức.
Cách trình duyệt đánh giá regex của bạn
Các trình duyệt hiện đại cài sẵn engine regex ECMAScript hỗ trợ bộ cờ đầy đủ: khớp không phân biệt chữ hoa thường (i), chế độ multiline (m), dotAll (s), Unicode (u) và cờ sticky (y). Khi bạn gõ một mẫu vào bộ kiểm tra, engine biên dịch nó thành NFA nội bộ và đánh giá nó dựa trên chuỗi kiểm tra của bạn theo thời gian thực, báo cáo mọi vị trí khớp và bất kỳ nhóm bắt nào. Backtracking xảy ra cục bộ trên CPU của bạn: một mẫu như (a+)+ trên chuỗi không khớp dài có thể chạy trong vài giây, và nhìn thấy sự dừng đó trong trình duyệt là phản hồi hữu ích trước khi triển khai mẫu trong mã sản xuất. Không có văn bản nào rời trang, vì vậy bạn có thể dán mẫu log hoặc bất kỳ đầu vào nào mà không cần định tuyến qua máy chủ bên thứ ba.
Các công cụ dùng trong hướng dẫn này
Câu hỏi thường gặp
Mẫu hoặc văn bản kiểm tra của tôi có bị gửi tới máy chủ không?
Không. Regex chạy bên trong một Web Worker ngay trong trình duyệt của bạn, nên mẫu và văn bản bạn kiểm tra vẫn ở trong tab. Điều này quan trọng vì văn bản bạn dán thường là một nhật ký thật, một danh sách khách hàng hay một cấu hình nội bộ, đúng loại dữ liệu mà bạn không muốn đặt trên máy chủ của người khác. Mở bảng Network trong công cụ dành cho nhà phát triển khi bạn nhấn Test và bạn sẽ không thấy yêu cầu nào mang văn bản của bạn ra ngoài. Nó cũng tiếp tục hoạt động khi ngoại tuyến một khi trang đã tải xong.
Công cụ kiểm tra dùng biến thể regex nào?
Nó dùng bộ máy biểu thức chính quy của JavaScript tích hợp sẵn trong trình duyệt của bạn, chính bộ máy chạy trong Node.js và trong mọi trang web. Nó bao gồm cú pháp thông dụng: lớp ký tự, bộ lượng từ, neo, phép thay thế, nhóm bắt đánh số và có tên, nhìn trước và nhìn sau. Một vài tính năng từ các biến thể khác, chẳng hạn đệ quy kiểu Perl hay bộ lượng từ chiếm hữu, không nằm trong bộ máy JavaScript, nên nếu một mẫu bạn sao chép từ một dự án PHP hay Python hoạt động khác đi, thì khác biệt về biến thể đó thường là lý do.