Regex Tester cho JavaScript

Gõ biểu thức chính quy và thấy mọi kết quả khớp được tô sáng ngay khi gõ, kèm nhóm bắt, xem trước thay thế và thư viện mẫu có sẵn.

Chạy trên trình duyệtKhông cần đăng kýKhông tải lên gì

Kết quả khớp được tô sáng

    
Dùng $1, $<name>, $& (toàn bộ kết quả khớp)
Chi tiết kết quả khớp
#Vị tríKết quả khớpNhóm
Bảng tra cứu regex
.Mọi ký tự trừ xuống dòng (mọi ký tự với s)
\d \w \sChữ số, ký tự từ, khoảng trắng
\D \W \SKhông phải chữ số, ký tự từ, khoảng trắng
[abc] [^abc]Một trong / không phải a, b, c
[a-z0-9]Khoảng ký tự
\p{L} \p{N}Chữ cái / số Unicode (cần u)
^ $Đầu / cuối đầu vào (của dòng với m)
\b \BRanh giới từ / không phải ranh giới
* + ?0 lần trở lên, 1 lần trở lên, 0 hoặc 1 lần
{n} {n,} {n,m}Đúng n, ít nhất n, từ n đến m lần
*? +? ??Lazy (khớp ít nhất có thể)
a|ba hoặc b
(…)Nhóm bắt, tham chiếu bằng $1
(?<name>…)Nhóm có tên, $<name>
(?:…)Nhóm không bắt
\1 \k<name>Tham chiếu ngược
(?=…) (?!…)Lookahead / lookahead phủ định
(?<=…) (?<!…)Lookbehind / lookbehind phủ định
\. \* \\Ký tự đặc biệt được escape
\n \t \rXuống dòng, tab, về đầu dòng
\uFFFFCode unit Unicode
\u{1F600}Code point (cần u)
$&Toàn bộ kết quả khớp trong chuỗi thay thế
$` $'Văn bản trước / sau kết quả khớp

Cách dùng Regex Tester

  1. Nhập mẫu của bạn vào giữa hai dấu gạch chéo, không kèm / bao quanh.
  2. Bật/tắt các cờ như g (mọi kết quả khớp), i (bỏ qua hoa thường) và m (nhiều dòng).
  3. Dán văn bản kiểm thử. Kết quả khớp được tô sáng bên phải và liệt kê kèm vị trí và nhóm bắt bên dưới.
  4. Đánh dấu Thay thế và nhập chuỗi thay thế như $1 hoặc $<name> để xem trước String.replace.
  5. Chọn một mẫu từ Thư viện mẫu để bắt đầu từ regex email, URL, IP hoặc ngày tháng đã được kiểm chứng.

Biểu thức chính quy JavaScript

Công cụ này dùng chính engine RegExp của trình duyệt, nên kết quả đúng như những gì String.match, matchAll, replace và RegExp.exec trả về trong JavaScript và Node.js. Bao gồm cả cú pháp hiện đại: nhóm có tên (?<name>…), lookbehind (?<=…), Unicode property escape như \p{L} với cờ u, và chỉ số kết quả khớp với cờ d.

Các cờ làm gì

CờTênTác dụng
gglobalTìm mọi kết quả khớp thay vì dừng ở kết quả đầu tiên.
iignoreCaseChữ cái khớp bất kể hoa hay thường.
mmultiline^ và $ khớp ở đầu và cuối mỗi dòng.
sdotAll. khớp cả ký tự xuống dòng.
uunicodeXử lý mẫu theo code point; cho phép \p{…} và \u{…}.
ystickyChỉ khớp tại vị trí lastIndex hiện tại.
dhasIndicesBáo vị trí bắt đầu và kết thúc của từng nhóm bắt.

Bảo vệ khỏi catastrophic backtracking

Mẫu có lượng từ lồng nhau, như (a+)+$ hoặc (\w|\d)*x, có thể mất thời gian theo cấp số mũ với đầu vào gần khớp. Trên một trang web thông thường điều đó làm treo tab. Ở đây mỗi lần so khớp chạy trong một Web Worker nền và bị dừng sau một giây, bạn nhận được cảnh báo rõ ràng thay vì trình duyệt bị treo. Cùng mẫu đó trong mã production có thể là lỗ hổng ReDoS, nên hãy coi cảnh báo là lỗi cần sửa.

Mẹo viết regex tốt hơn

  • Neo mẫu bằng ^ và $ khi kiểm tra toàn bộ giá trị, nếu không thì chỉ cần khớp ở bất kỳ đâu trong chuỗi là qua.
  • Ưu tiên lớp ký tự cụ thể như [^"]* thay vì .*; chúng nhanh hơn và tránh khớp quá mức.
  • Dùng nhóm không bắt (?:…) khi bạn không cần giá trị được bắt.
  • Đặt tên cho nhóm. match.groups.year dễ đọc hơn match[1].

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

Công cụ này dùng loại regex nào?
JavaScript (ECMAScript), thông qua RegExp có sẵn của trình duyệt. Phần lớn cú pháp giống PCRE, Python và Java, nhưng các tính năng như possessive quantifier, atomic group và modifier nội tuyến như (?i) không có trong JavaScript.
Vì sao mẫu của tôi chỉ tìm được một kết quả?
Không có cờ g (global), JavaScript dừng sau kết quả khớp đầu tiên. Bật g để tìm mọi lần xuất hiện.
Làm sao tham chiếu nhóm trong chuỗi thay thế?
Dùng $1, $2… cho nhóm đánh số, $<name> cho nhóm có tên, $& cho toàn bộ kết quả khớp và $$ cho ký tự đô la thực.
Vì sao công cụ dừng vì quá thời gian?
Mẫu mất hơn một giây với đầu vào của bạn, điều này hầu như luôn có nghĩa là catastrophic backtracking. Hãy tìm lượng từ lồng nhau như (x+)+ hoặc các lựa chọn chồng lấn như (a|a)* và viết lại để mỗi ký tự chỉ có thể được khớp theo một cách.
Dữ liệu test của tôi có bị gửi đi đâu không?
Không. Việc so khớp chạy cục bộ trong một Web Worker bên trong trình duyệt. Mẫu và văn bản của bạn chỉ được lưu trong trình duyệt của chính bạn để vẫn còn đó khi bạn quay lại.

Công cụ liên quan