Trình kiểm tra Regex
Kiểm tra biểu thức chính quy JavaScript trực tiếp. Xem các khớp được tô sáng và các nhóm bắt được liệt kê.
Các khớp được tô sáng
Khớp & nhóm
- Nhập mẫu regex của bạn vào trường trên (không cần bọc trong dấu gạch chéo).
- Bật các cờ bạn muốn: g cho tất cả các khớp, i cho không phân biệt chữ hoa/thường, v.v.
- Dán hoặc nhập chuỗi kiểm tra vào hộp Chuỗi kiểm tra.
- Xem các khớp được tô sáng theo thời gian thực; kiểm tra các nhóm đã bắt trong bảng bên dưới.
Công cụ này làm gì?
Trình kiểm tra này chạy mẫu của bạn đối với chuỗi kiểm tra bằng cách sử dụng engine RegExp gốc của trình duyệt — giống như Node.js, Deno và mọi trình duyệt sử dụng. Các khớp được tô sáng inline. Các nhóm bắt được đánh số và đặt tên được trích xuất vào một bảng để bạn có thể thấy chính xác mỗi đoạn trong ngoặc đã bắt được gì.
Ví dụ
Mẫu (với cờ g):
\b(\w+)@(\w+\.\w+)\b Chuỗi kiểm tra:
Contact us at [email protected] or [email protected]. Not an email: foo@bar (no TLD). Các khớp:
1 [email protected] $1: hello $2: example.com
2 [email protected] $1: support $2: happycoder.dev foo@bar không khớp vì \w+\.\w+ yêu cầu một dấu chấm trong tên miền.
Tại sao regex của tôi không khớp?
- Quên cờ g. Không có nó, chỉ trả về khớp đầu tiên. /cat/.exec("cat cat") tìm thấy một "cat"; /cat/g tìm thấy cả hai.
- Ký tự meta chưa escape. example.com cũng khớp với examplexcom vì . khớp với bất kỳ ký tự nào. Escape nó: example\.com.
- Khớp tham lam tiêu thụ quá nhiều. <.*> trên <a><b> bắt toàn bộ. Sử dụng lazy <.*?> hoặc <[^>]*> để dừng ở > đầu tiên.
- Nhầm lẫn ranh giới từ. \b là một vị trí giữa một ký tự từ và một ký tự không phải từ. Các mẫu như \bfoo-bar\b thất bại vì - đã là một ranh giới không phải từ ở giữa.
- Không khớp chữ hoa/thường. [a-z]+ sẽ không khớp với Hello. Thêm cờ i hoặc bao gồm [A-Za-z]+.
- Đa dòng ^ / $. Không có cờ m chúng chỉ neo vào toàn bộ chuỗi, không phải mỗi dòng. Bật m nếu bạn đang quét các dòng log.
Câu hỏi thường gặp
Trình kiểm tra này sử dụng hương vị regex nào?
Regex JavaScript (ECMAScript), thông qua engine RegExp tích hợp của trình duyệt. Nó khác với PCRE (PHP, Perl), mô-đun re của Python, và regex POSIX ở một số cách: không có đệ quy, không có quantifier chiếm hữu, các nhóm đặt tên sử dụng (?<name>...) thay vì (?P<name>...), và các shortcut lớp ký tự như \d chỉ là ASCII trừ khi bạn thêm cờ u.
Nó có hỗ trợ lookbehind không?
Có. Các assertion lookbehind như (?<=foo)bar và (?<!foo)bar đã được thêm vào ES2018 và được hỗ trợ trong tất cả các bản dựng Chromium, Firefox, và Safari hiện tại. Nếu bạn đang nhắm đến các trình duyệt rất cũ trong production, hãy kiểm tra caniuse trước khi dựa vào chúng — nhưng trình kiểm tra này tự nó chạy chúng tốt.
Các cờ g, i, m, s, và u có nghĩa là gì?
g tìm thấy mọi khớp thay vì chỉ khớp đầu tiên. i làm cho việc khớp không phân biệt chữ hoa/thường. m làm cho ^ và $ khớp với đầu và cuối mỗi dòng thay vì toàn bộ chuỗi. s (dotall) làm cho . khớp với newlines. u kích hoạt xử lý Unicode đầy đủ và phân tích escape nghiêm ngặt hơn. Chỉ chọn các cờ bạn cần — đặc biệt g thay đổi số lượng khớp bạn nhận được.
Tại sao quantifier tham lam của tôi khớp quá nhiều?
Các quantifier như *, +, và {n,} tham lam theo mặc định — chúng khớp nhiều nhất có thể và chỉ trả lại nếu phần còn lại của mẫu thất bại. Thêm ? để làm chúng lazy: .*? khớp ít nhất có thể. Cách khắc phục phổ biến cho <a>.*</a> ăn xuyên nhiều thẻ: sử dụng <a>.*?</a> hoặc lớp phủ định <a>[^<]*</a>.
Làm thế nào để tham chiếu một nhóm đã bắt sau đó trong mẫu hoặc thay thế?
Bên trong mẫu, sử dụng \1, \2, v.v. để khớp với cùng văn bản mà một nhóm trước đó đã bắt — (\w+)\s+\1 khớp với các từ lặp lại. Trong một chuỗi thay thế (không được hỗ trợ trong trình kiểm tra trực tiếp này, nhưng trong String.replace) sử dụng $1, $2. Các nhóm đặt tên sử dụng \k<name> bên trong mẫu và $<name> trong các thay thế.
Tại sao regex của tôi bị hỏng khi mẫu chứa dấu chấm, dấu gạch chéo, hoặc dấu ngoặc?
Đó là các ký tự meta regex. Để khớp chúng theo nghĩa đen, escape bằng dấu gạch chéo ngược: \. cho dấu chấm, \/ cho dấu gạch chéo (tùy chọn trong chuỗi new RegExp, bắt buộc giữa các /.../ literals), \( và \) cho dấu ngoặc. Các ký tự đặc biệt là . * + ? ^ $ { } ( ) | [ ] \ — bất kỳ ký tự nào trong số này như văn bản đen cần được escape.
Bạn có lưu regex hoặc văn bản kiểm tra tôi nhập ở đây không?
Không. Chúng tôi không lưu các mẫu bạn viết hoặc văn bản bạn kiểm tra chúng. Mọi thứ bạn nhập bị loại bỏ ngay khi bạn đóng hoặc làm mới tab — không có nhật ký, không có bản ghi nào về phía chúng tôi về những gì bạn đã khớp. Nếu bạn muốn yên tâm thêm, công cụ phát triển của trình duyệt sẽ xác nhận.