tools / regex
regex/
Kiểm tra regex JavaScript theo thời gian thực: tô sáng kết quả khớp, liệt kê nhóm bắt, xem trước kết quả thay thế.
Văn bản kiểm tra
Kết quả khớp được tô sáng
Danh sách kết quả khớp
| # | Vị trí | Khớp | Nhóm bắt |
|---|
Thay thế
Câu hỏi thường gặp
Công cụ này dùng engine regex nào, có giống Python hay PCRE không
Dùng engine regex JavaScript có sẵn của trình duyệt, nên cú pháp không hoàn toàn giống Python, PCRE hay Java. Ví dụ nhóm đặt tên phải viết là (?<name>...) chứ không phải (?P<name>...) của Python; flag nội tuyến như (?i) ở đầu không được hỗ trợ, muốn bỏ qua hoa thường hãy tích chọn flag i; lượng từ chiếm hữu (possessive) và nhóm nguyên tử (atomic group) cũng không có. Các cú pháp mới hơn như lookbehind có dùng được hay không còn tùy trình duyệt của bạn.
Vì sao regex sao chép từ code lại không khớp
Nhiều khả năng là bạn đã sao chép luôn dấu gạch chéo hai bên, flag ở cuối hoặc các dấu gạch chéo ngược dùng để escape. Trong ô nhập chỉ gõ phần nằm giữa hai dấu gạch chéo, còn các flag như g, i ở cuối thì tích chọn ở bên phải. Nếu sao chép từ chuỗi JavaScript, hãy đổi \\d+ thành \d+, vì ô nhập không cần escape dấu gạch chéo ngược thêm lần nữa.
Vì sao chỉ khớp được một kết quả, hoặc . và ^ $ hoạt động không đúng
Hãy kiểm tra các flag bên phải ô nhập trước. Khi không bật g thì chỉ lấy kết quả khớp đầu tiên, tiêu đề danh sách sẽ ghi rõ. Dấu chấm mặc định không khớp xuống dòng, phải tích chọn s mới được; ^ và $ mặc định chỉ khớp đầu và cuối của cả đoạn văn bản, muốn khớp theo từng dòng thì tích chọn m. y là chế độ sticky: các kết quả khớp phải bắt đầu từ đầu và nối liền nhau, bình thường không cần tích.
Báo "Việc khớp mất hơn 1.5 giây nên đã bị dừng" thì làm sao
Nghĩa là regex này backtrack quá nhiều trên văn bản của bạn, cần viết lại. Ví dụ điển hình là lượng từ lồng nhau như (a+)+, gặp một đoạn văn bản dài không khớp được thì thời gian chạy tăng theo cấp số nhân. Trang chạy regex trong luồng nền, quá 1.5 giây là dừng ngay, nên bản thân trang không bị treo. Viết lượng từ cụ thể hơn, bỏ lồng nhau hoặc dùng khoảng ký tự rõ ràng hơn thường là giải quyết được.
Có rất nhiều kết quả khớp hoặc văn bản rất dài thì sao
Phần tô sáng và danh sách hiển thị tối đa 1000 kết quả đầu, vượt quá sẽ có thông báo, kết quả thay thế không bị giới hạn này ảnh hưởng. Khi văn bản dài hơn 200.000 ký tự, trang sẽ đợi bạn ngừng nhập khoảng 0,4 giây rồi mới tính lại. Ngoài ra không có giới hạn độ dài nào khác, tốc độ thực tế phụ thuộc vào chính regex.
Viết mẫu thay thế thế nào
Dùng cú pháp thay thế của JavaScript: $1, $2 là nhóm bắt thứ mấy, $<name> là nhóm đặt tên, $& là toàn bộ phần khớp, $$ là ký hiệu đô la theo nghĩa đen. Để trống mẫu là xóa phần nội dung khớp. Khi không bật g thì chỉ thay thế chỗ đầu tiên.
Các mẫu có sẵn như số điện thoại, chứng minh thư có dùng để kiểm tra trực tiếp được không
Chỉ nên coi là điểm khởi đầu, không phải kiểm tra nghiêm ngặt. Mẫu số điện thoại nhận 11 chữ số bắt đầu bằng 1, chữ số thứ hai từ 3 đến 9, không xử lý mã vùng. Mẫu chứng minh thư chỉ kiểm tra định dạng 18 ký tự, ngày được chấp nhận từ 01 đến 31, không xác minh chữ số kiểm tra cuối cùng và cũng không đối chiếu mã vùng có tồn tại hay không. Mẫu email và URL chỉ bao gồm các cách viết phổ biến, URL chỉ nhận http và https. Bấm vào một mẫu sẽ thay regex trong ô nhập và đặt lại flag chỉ còn g.
Văn bản tôi nhập có bị tải lên không
Không. Regex chạy trong luồng nền của trình duyệt, văn bản kiểm tra, regex và mẫu thay thế đều không được gửi lên máy chủ, bản thân trang cũng không lưu nội dung bạn nhập.