Đến phần nội dung
Toova
Tất cả công cụ

Regex101 vs Trình Kiểm Tra Regex Trực Tuyến — So Sánh Trung Thực

Toova

Regex101 là trình kiểm tra regex mà hầu hết các nhà phát triển tiếp cận theo mặc định. Nó nhanh, giàu tính năng, hỗ trợ sáu flavor regex và có một bảng giải thích chi tiết dạy bạn mỗi phần của một mẫu làm gì. Đối với hầu hết các trường hợp sử dụng, nó xứng đáng với danh tiếng là tiêu chuẩn vàng.

Nhưng nó không phải là tùy chọn duy nhất, và nó không phải là lựa chọn đúng cho mọi tình huống. Nó gửi các chuỗi kiểm tra của bạn đến một máy chủ. Nó mặc định là PCRE thay vì JavaScript. Giao diện của nó đủ dày đặc để áp đảo người mới bắt đầu. Và nếu bạn cần kiểm tra nhanh mà không mở một tab khác, hoặc nếu bạn quan tâm về việc giữ các chuỗi nhạy cảm khỏi các máy chủ bên ngoài, các phương án thay thế đáng để biết.

So sánh này bao quát Regex101, Toova Regex Tester, RegExr, RegexPal, iHateRegex và Debuggex — mỗi cái làm tốt cái gì, mỗi cái thiếu sót ở đâu, và làm thế nào để chọn dựa trên luồng công việc thực tế của bạn. Để kiểm tra ngay lập tức, Toova Regex Tester chạy hoàn toàn trong trình duyệt của bạn. Để so sánh các khối văn bản sau khi áp dụng một thay thế, text diff hiển thị chính xác cái gì đã thay đổi. Để xác thực định dạng đầu ra của các chuỗi đã được xử lý regex của bạn, markdown preview render kết quả trực quan.

Regex101 — Tiêu Chuẩn Vàng

Regex101 được xây dựng bởi Firas Dib và phát hành năm 2012. Nó đã trở thành tiêu chuẩn thực tế cho phát triển regex trực tuyến, và vì lý do tốt. Bộ tính năng không thể sánh bằng giữa các công cụ miễn phí:

  • Sáu flavor regex: PCRE, PCRE2, ECMAScript (JavaScript), Python, Golang và Java. Bạn chọn flavor trong dropdown trên cùng bên trái.
  • Giải thích thời gian thực: Khi bạn gõ regex, một bảng chi tiết bên phải giải thích mọi token — bộ lượng từ, lớp ký tự, neo, nhóm bắt — bằng tiếng Anh đơn giản với vị trí chính xác được làm nổi bật trong mẫu.
  • Phân tích khớp: Mỗi kết quả khớp được mã màu và có thể nhấp. Các nhóm bắt được hiển thị riêng, với số nhóm và nhãn nhóm được đặt tên.
  • Chế độ thay thế: Viết một chuỗi thay thế và xem kết quả của thay thế trực tiếp, với hỗ trợ backreference.
  • Chế độ unit test: Định nghĩa các khớp và bỏ qua mong đợi, sau đó xác minh chúng đối với regex của bạn. Hữu ích khi một mẫu cần thỏa mãn nhiều yêu cầu đồng thời.
  • Thư viện và permalink: Lưu regex của bạn vào một URL vĩnh viễn và chia sẻ nó. Thư viện cũng chứa hàng nghìn mẫu được đóng góp bởi cộng đồng với các giải thích.
  • Debugger: Bước qua cách engine xử lý chuỗi kiểm tra từng ký tự, bao gồm quay lui. Vô giá để chẩn đoán quay lui thảm họa.

Hạn Chế Của Regex101

Giao diện dày đặc. Một người dùng lần đầu tiên đối mặt với bố cục ba bảng với các dropdown, các checkbox cờ, một bảng thông tin khớp và sidebar giải thích đồng thời. Đối với các trường hợp sử dụng đơn giản, điều này là quá mức và tiếng ồn trực quan làm chậm bạn xuống.

Regex101 xử lý chuỗi kiểm tra của bạn trên các máy chủ của họ. Tính năng thư viện lưu các mẫu công khai theo mặc định — bất kỳ regex nào bạn dán và chia sẻ đều có thể nhìn thấy bởi bất kỳ ai có URL. Điều này thường ổn cho các mẫu không nhạy cảm, nhưng hãy cẩn thận khi các chuỗi kiểm tra của bạn chứa dữ liệu người dùng thực, các định danh hệ thống nội bộ hoặc các định dạng độc quyền.

Flavor mặc định là PCRE, không phải JavaScript. Các nhà phát triển kiểm tra regex JS phải nhớ chuyển — và nếu họ quên, họ có thể gỡ lỗi một mẫu hoạt động trong PCRE nhưng thất bại trong JavaScript production (hoặc ngược lại). Các nhóm bắt được đặt tên là bẫy phổ biến nhất: PCRE dùng (?P<name>...) trong khi ECMAScript dùng (?<name>...).

Toova Regex Tester — Ưu Tiên Quyền Riêng Tư, Nguyên Bản JS

Toova Regex Tester có một cách tiếp cận khác: chỉ phía client, engine JavaScript, không có round-trip máy chủ. Regex và các chuỗi kiểm tra của bạn được xử lý trong trình duyệt của bạn dùng cùng engine như Node.js và các trình duyệt hiện đại. Cái bạn thấy chính xác là cái code JavaScript production của bạn sẽ làm — không cần dịch flavor.

  • Quyền riêng tư: Không có gì rời trình duyệt của bạn. Phù hợp để kiểm tra với các chuỗi nhạy cảm.
  • Tương đương JavaScript: Dùng engine regex JavaScript nguyên bản, loại bỏ sự nhầm lẫn PCRE-vs-ECMAScript.
  • Cờ: Hỗ trợ tất cả các cờ JS tiêu chuẩn — toàn cục, không phân biệt chữ hoa chữ thường, đa dòng, dotAll, unicode, sticky.
  • Làm nổi bật khớp: Các khớp và các nhóm bắt được làm nổi bật inline trong chuỗi kiểm tra.
  • 16 ngôn ngữ: Giao diện được bản địa hóa cho các đội ngũ quốc tế.

Đánh đổi: Toova không hỗ trợ các flavor PCRE, Python hoặc Go — nó chỉ JavaScript. Không có trình gỡ lỗi từng bước, không có chế độ unit test, và không có thư viện cộng đồng. Đối với phát triển JS thuần túy, các thiếu sót này hiếm khi là vấn đề. Đối với công việc regex đa ngôn ngữ hoặc gỡ lỗi sâu của quay lui thảm họa, Regex101 vẫn là công cụ tốt hơn.

RegExr — Lựa Chọn Cho Người Dạy

RegExr được xây dựng cụ thể với việc học trong đầu. Thư viện cộng đồng của nó chứa hàng trăm mẫu với các giải thích được viết bởi người — không chỉ cái mẫu làm gì, mà tại sao nó được cấu trúc theo cách đó và các trường hợp biên nào cần xem. Điều này khiến nó là một tài nguyên tuyệt vời khi bạn không chỉ kiểm tra một mẫu mà còn cố hiểu một cấu trúc mới.

Bảng giải thích hiển thị phân tích từng token tương tự như Regex101 nhưng với thiết kế trực quan sạch sẽ hơn dễ phân tích hơn cho người mới bắt đầu. Giao diện ít dày đặc hơn tổng thể.

RegExr hỗ trợ các flavor JavaScript và PCRE. Nó xử lý dữ liệu phía client cho khớp, nhưng các mẫu thư viện được lưu trữ phía máy chủ. Nó không đầy đủ tính năng như Regex101 (không có trình gỡ lỗi từng bước, không có unit test, ít flavor hơn), nhưng đối với công việc regex JavaScript hàng ngày và để học ngôn ngữ, nó là một thay thế mạnh.

RegexPal — Tối Giản Và Nhanh

RegexPal là một trình kiểm tra regex JavaScript tối giản. Không tài khoản, không xử lý máy chủ, không thư viện, không bảng giải thích. Bạn dán một regex, dán một chuỗi kiểm tra, và các kết quả khớp được làm nổi bật ngay lập tức. Không có gì khác.

Sự tối giản này là sức mạnh của nó: trang tải trong dưới một giây, không có ma sát để có kết quả, và sự tập trung chỉ JavaScript có nghĩa là không có sự nhầm lẫn flavor. Đây là công cụ bạn dùng khi bạn cần câu trả lời nhanh và không muốn nghĩ về các tùy chọn giao diện.

Điểm yếu: không có giải thích, không có chế độ thay thế, không có hiển thị nhóm được đặt tên, không có gỡ lỗi. Nếu regex của bạn không hoạt động, RegexPal không cho bạn biết gì về lý do.

iHateRegex — Để Khám Phá Mẫu

iHateRegex có một cách tiếp cận hoàn toàn khác: nó là một thư viện được tuyển chọn của các mẫu regex sẵn sàng cho production cho các tác vụ phổ biến. Xác thực email, khớp URL, số điện thoại, địa chỉ IP, các định dạng thẻ tín dụng, màu hex, ngày — mỗi mẫu đi kèm với một giải thích về cái nó bao quát và cái nó cố ý loại trừ.

Nó không chủ yếu là một công cụ kiểm tra. Bạn đến iHateRegex khi bạn cần một mẫu đã biết tốt cho một vấn đề phổ biến hơn là khi bạn đang xây dựng một mẫu tùy chỉnh từ đầu. Các mẫu được cộng đồng kiểm tra và các trường hợp biên được tài liệu hóa, thường có giá trị hơn so với việc xây dựng của riêng bạn.

Có một trình kiểm tra cơ bản trên mỗi trang mẫu cho phép bạn xác minh mẫu đối với các chuỗi mẫu của riêng bạn trước khi sao chép nó. Việc thực thi kiểm tra là phía client.

Debuggex — Người Giải Thích Trực Quan

Debuggex render regex của bạn dưới dạng một sơ đồ railroad — một biểu đồ luồng cho thấy các đường có thể qua mẫu. Mỗi lựa chọn (a|b), nhóm tùy chọn ((...)?), và bộ lượng từ (+, *, {n,m}) trở thành một nhánh hoặc vòng lặp trực quan trong sơ đồ.

Biểu diễn trực quan này làm cho một số mẫu nhất định ngay lập tức rõ ràng mà khó suy luận trong dạng văn bản tuyến tính. Một mẫu như (a|ab)*c — nổi tiếng vì gây ra quay lui thảm họa — hiển thị cấu trúc phân nhánh theo cấp số nhân của nó trong sơ đồ theo cách mà biểu diễn tuyến tính không làm được.

Debuggex không phải là một công cụ tốc độ. Xây dựng và lặp lại trên một mẫu chậm hơn so với trong các công cụ dựa trên văn bản. Nhưng để hiểu tại sao một mẫu hoạt động bất ngờ, hoặc để giải thích một regex phức tạp cho một đồng nghiệp không biết cú pháp, đầu ra trực quan thực sự hữu ích. Hỗ trợ JavaScript, PCRE và Python.

Tham Khảo Flavor — Các Khác Biệt Chính

Điều quan trọng nhất để hiểu về các flavor regex là một mẫu hoạt động trong một có thể âm thầm thất bại hoặc hoạt động khác trong một cái khác. Đây là các trường hợp bẫy phổ biến nhất:

Các nhóm bắt được đặt tên

PCRE dùng (?P<name>...). ECMAScript (JavaScript) dùng (?<name>...). Python chấp nhận cả hai. Go dùng (?P<name>...) như PCRE.

(?P<year>\d{4})-(?P<month>\d{2})-(?P<day>\d{2})

Dạng PCRE ở trên sẽ gây SyntaxError trong JavaScript. Dạng ECMAScript đúng:

(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})

Nếu bạn đang sao chép một mẫu từ một tutorial PHP vào code JavaScript, các nhóm được đặt tên sẽ bị vỡ. Luôn kiểm tra flavor.

Khẳng định lookbehind

PCRE đã hỗ trợ lookbehind độ dài biến đổi trong nhiều thập kỷ. JavaScript (ECMAScript 2018) đã thêm hỗ trợ lookbehind, nhưng chỉ trong các engine hiện đại — Node.js 10+, Chrome 62+. Các runtime JavaScript cũ từ chối bất kỳ mẫu lookbehind nào với SyntaxError.

(?<=\$)\d+(\.\d{2})?

Mẫu này hoạt động giống hệt nhau trong PCRE và JavaScript hiện đại, nhưng sẽ thất bại trong các môi trường nhắm mục tiêu ES5. Kiểm tra với flavor phù hợp cho runtime mục tiêu của bạn.

Các nhóm atomic và bộ lượng từ chiếm hữu

PCRE hỗ trợ các nhóm atomic ((?>...)) và các bộ lượng từ chiếm hữu (++, *+, ?+), ngăn ngừa quay lui và loại bỏ một số trường hợp quay lui thảm họa. ECMAScript không hỗ trợ cả hai. Nếu bạn thấy chúng trong một mẫu, đó là đặc thù PCRE và phải được viết lại cho JavaScript.

So Sánh Tính Năng

Công cụ Quyền riêng tư Flavor JS PCRE Giải thích Thay thế Trình gỡ lỗi Thư viện
Toova Phía client Không Cơ bản Không Không
Regex101 Máy chủ Chi tiết
RegExr Phía client Tốt Không Không Cộng đồng
RegexPal Phía client Không Không Không Không Không
iHateRegex Phía client Không Tài liệu mẫu Không Không Được tuyển chọn
Debuggex Máy chủ Sơ đồ trực quan Không Không Không

Vấn Đề Regex Email — Một Nghiên Cứu Trường Hợp

Không có so sánh regex nào sẽ hoàn chỉnh mà không giải quyết xác thực email. Các mẫu được dùng qua các công cụ này minh họa tại sao chọn trình kiểm tra phù hợp quan trọng.

^[a-zA-Z0-9._%+\-]+@[a-zA-Z0-9.\-]+\.[a-zA-Z]{2,}$

Mẫu này là bộ xác thực email "đơn giản" phổ biến nhất. Nó bao quát phần lớn các địa chỉ email trong thế giới thực nhưng từ chối những cái hợp lệ về mặt kỹ thuật như user+tag@example.co.uk (nó thực sự sẽ vượt qua — + được bao gồm), "user name"@example.com (các phần cục bộ được đặt trong dấu nháy — sẽ không vượt qua), và các địa chỉ với tên miền không phải ASCII.

Vấn đề không phải là công cụ nào để dùng cho mẫu này — tất cả đều xử lý nó. Vấn đề là hiểu cái mẫu chấp nhận và từ chối yêu cầu một bảng giải thích (Regex101, RegExr) hoặc tài liệu được tuyển chọn (iHateRegex). Một công cụ chỉ hiển thị các kết quả khớp được làm nổi bật mà không có ngữ cảnh — RegexPal, chế độ xem Toova cơ bản — cho bạn biết mẫu đã khớp, nhưng không phải là nó đã khớp đúng những thứ.

Tham khảo của MDN về biểu thức chính quy JavaScript là nguồn có thẩm quyền cho cú pháp regex ECMAScript và bao quát các khác biệt giữa JS và PCRE chi tiết.

Các Cân Nhắc Quyền Riêng Tư

Các tác động quyền riêng tư của các trình kiểm tra regex thường bị bỏ qua. Chuỗi kiểm tra của bạn không chỉ là một mẫu ngẫu nhiên — nó thường là:

  • Một dòng log thực từ production chứa tên máy chủ nội bộ, ID người dùng hoặc các tham số yêu cầu
  • Một giá trị do người dùng gửi bạn đang cố xác thực — có thể là một địa chỉ email, số điện thoại hoặc định danh
  • Một định dạng dữ liệu nội bộ tiết lộ kiến trúc hệ thống của bạn
  • Một mẫu độc quyền mà bạn không muốn được lập chỉ mục hoặc liên kết công khai với tên miền của bạn

Các công cụ phía máy chủ (Regex101, Debuggex) gửi dữ liệu này đến một máy chủ từ xa. Tính năng thư viện của Regex101 cũng có thể vô tình làm cho mẫu và chuỗi kiểm tra của bạn có thể khám phá nếu bạn chia sẻ một permalink mà không nhận ra nó công khai theo mặc định.

Các công cụ phía client (Toova, RegExr cho khớp, RegexPal, iHateRegex) giữ tất cả xử lý cục bộ. Đối với công việc phát triển dùng dữ liệu mẫu, xử lý phía máy chủ thường ổn. Đối với gỡ lỗi production với dữ liệu thực, dùng một công cụ phía client.

Khi Nào Dùng Cái Nào

Dùng Regex101 khi:

  • Bạn cần hỗ trợ regex PCRE, Python, Go hoặc Java cùng với JavaScript.
  • Bạn đang gỡ lỗi một mẫu phức tạp và cần trình gỡ lỗi từng bước để truy vết quay lui.
  • Bạn muốn định nghĩa các unit test cho regex của bạn để xác minh nhiều trường hợp đồng thời.
  • Bạn cần chia sẻ một mẫu với một đồng nghiệp với một URL vĩnh viễn và giải thích.
  • Chuỗi kiểm tra của bạn không chứa dữ liệu nhạy cảm.

Dùng Toova Regex Tester khi:

  • Môi trường mục tiêu của bạn là JavaScript (trình duyệt hoặc Node.js) và bạn muốn tương đương chính xác.
  • Các chuỗi kiểm tra của bạn chứa dữ liệu nhạy cảm, riêng tư hoặc độc quyền.
  • Bạn cần một giao diện nhanh, không gây xao lãng để lặp lại mà không chuyển chế độ.
  • Bạn đang làm việc trong một đội ngũ đa ngôn ngữ và muốn một giao diện được bản địa hóa.

Dùng RegExr khi:

  • Bạn đang học regex và muốn các giải thích rõ ràng cùng với khớp.
  • Bạn muốn duyệt một thư viện cộng đồng của các mẫu đã được kiểm tra cho các vấn đề phổ biến.
  • Bạn cần quyền riêng tư phía client với một bảng giải thích tốt hơn RegexPal.

Dùng iHateRegex khi:

  • Bạn cần một mẫu đã biết tốt cho một tác vụ phổ biến — email, URL, điện thoại, IP — thay vì xây dựng từ đầu.
  • Bạn muốn các trường hợp biên và loại trừ được tài liệu hóa cho một mẫu trước khi dùng nó trong production.

Dùng Debuggex khi:

  • Bạn cần hiểu tại sao một mẫu phức tạp hoạt động bất ngờ — đặc biệt với thay thế và quay lui.
  • Bạn đang giải thích một regex cho ai đó không biết cú pháp.
  • Bạn đang tài liệu hóa một mẫu và muốn bao gồm một sơ đồ railroad trực quan.

Dùng RegexPal khi:

  • Bạn muốn kết quả nhanh nhất có thể với chi phí giao diện bằng không.
  • Bạn đang kiểm tra một mẫu đơn giản và không cần giải thích hoặc thay thế.

Kết Luận

Regex101 xứng đáng với danh tiếng của nó. Đối với hỗ trợ đa flavor, gỡ lỗi sâu và các mẫu cộng đồng, không có gì sánh được giữa các công cụ miễn phí. Nhưng đối với phát triển JavaScript hàng ngày, giữ các chuỗi nhạy cảm khỏi các máy chủ bên ngoài và tránh bẫy mặc định PCRE, một công cụ nguyên bản JavaScript phía client là điểm khởi đầu đúng.

Khuyến nghị thực tế cho hầu hết các nhà phát triển JavaScript: lưu Toova Regex Tester trong dấu trang cho công việc hàng ngày và kiểm tra nhạy cảm với quyền riêng tư, và mở Regex101 khi bạn cần trình gỡ lỗi từng bước hoặc hỗ trợ đa flavor. Chúng bổ sung lẫn nhau hơn là cạnh tranh.

Đối với các mẫu regex biến đổi văn bản, công cụ text diff giúp bạn xác minh rằng các thay thế đã thay đổi chính xác cái bạn dự định và không có gì khác. Và để kiểm tra rằng đầu ra đã được regex xử lý của bạn render đúng khi nó bao gồm markdown hoặc HTML, markdown preview cho bạn một kiểm tra trực quan tức thì.