Trình kiểm tra Regex
Xây dựng và kiểm tra biểu thức chính quy trên văn bản của riêng bạn theo thời gian thực. Xem mọi kết quả khớp được tô sáng, xem chi tiết các nhóm bắt và xem trước nội dung thay thế — tất cả ngay trong trình duyệt của bạn.
/
/g
Cờ
Mẹo: bật cờ g để thay thế mọi kết quả khớp thay vì chỉ kết quả đầu tiên.
Cách sử dụng Trình kiểm tra Regex
- 1
Viết mẫu của bạn
Gõ một biểu thức chính quy vào ô mẫu, rồi bật/tắt các thẻ cờ (g, i, m và nhiều cờ khác) để kiểm soát chính xác cách so khớp hoạt động.
- 2
Thêm văn bản kiểm tra
Dán văn bản bạn muốn tìm kiếm vào ô “Chuỗi kiểm tra”. Các kết quả khớp được tô sáng ngay lập tức khi bạn gõ hoặc chỉnh sửa mẫu.
- 3
Xem chi tiết kết quả khớp
Xem lại từng kết quả khớp, vị trí của nó trong văn bản, cùng mọi nhóm bắt hay nhóm có tên trong danh sách kết quả để xác nhận mẫu hoạt động đúng như mong đợi.
- 4
Thay thế hoặc sao chép
Nhập nội dung thay thế để xem trước các phép thế với tham chiếu ngược kiểu $1, rồi sao chép kết quả thẳng vào mã nguồn hoặc tài liệu của bạn.
Biểu thức chính quy trong thực tế: Cẩm nang thực hành cho lập trình viên
Regex thực sự mô tả điều gì
Biểu thức chính quy là một ngôn ngữ mẫu nhỏ gọn dùng để mô tả các tập hợp chuỗi. Thay vì hỏi xem một đoạn văn bản có bằng đúng một giá trị cố định hay không, bạn mô tả hình dạng của nó — một chuỗi các chữ số, một từ theo sau là dấu @ và một tên miền, ba chữ cái rồi đến một dấu gạch ngang — và bộ máy sẽ quét văn bản của bạn để tìm mọi chuỗi con phù hợp. Chỉ riêng ý tưởng đó đã tạo nên sức mạnh cho việc kiểm tra dữ liệu, tìm-và-thay-thế, phân tích nhật ký, tách token và trích xuất dữ liệu trong gần như mọi ngôn ngữ và trình soạn thảo.
Trình kiểm tra này dùng bộ máy JavaScript (ECMAScript) tích hợp sẵn trong trình duyệt của bạn, chính là bộ máy mà Node.js và các ứng dụng web sử dụng. Vì vậy, một mẫu khớp được ở đây sẽ hoạt động y hệt trong mã ứng dụng của bạn, biến nó thành một môi trường thử nghiệm trung thực để bạn xây dựng và gỡ lỗi một mẫu trước khi dán nó vào dự án.
Lớp ký tự và các khối xây dựng cơ bản
Phần lớn một mẫu chỉ gồm các ký tự nguyên văn tự khớp với chính chúng, xen kẽ với một vài token đặc biệt. Một lớp ký tự đặt trong dấu ngoặc vuông sẽ khớp với bất kỳ một ký tự nào trong một tập hợp: một dải chữ cái thường, một tập các nguyên âm, hay một chữ số. Ký hiệu rút gọn backslash-d khớp với một chữ số, backslash-w khớp với một ký tự từ (chữ cái, chữ số, dấu gạch dưới), backslash-s khớp với khoảng trắng, còn dấu chấm khớp với bất kỳ ký tự nào ngoại trừ ký tự xuống dòng. Hãy viết hoa ký hiệu rút gọn để đảo ngược nó — backslash-D là bất kỳ ký tự nào không phải chữ số.
Đây là những nguyên tử mà bạn kết hợp lại để tạo nên mọi thứ khác. Chẳng hạn, một mẫu cho màu hex là một dấu neo cho dấu thăng, theo sau là một lớp ký tự gồm các chữ số thập lục phân được lặp lại; còn một mẫu cho một từ đơn giản chỉ là backslash-w lặp lại một hoặc nhiều lần. Hãy xây dựng các mẫu từ những mảnh nhỏ này thay vì tìm đến một biểu thức khổng lồ duy nhất.
Dấu neo, bộ định lượng và phép hoặc
Dấu neo khớp với các vị trí chứ không phải ký tự. Dấu mũ khớp với điểm bắt đầu của chuỗi (hoặc điểm bắt đầu của một dòng khi bật cờ Multiline), còn dấu đô la khớp với điểm kết thúc; token ranh giới từ backslash-b khớp với ranh giới giữa một ký tự từ và một ký tự không phải từ, đó là cách bạn khớp trọn một từ mà không vô tình bắt nó bên trong một từ dài hơn. Bộ định lượng kiểm soát sự lặp lại: dấu cộng nghĩa là một hoặc nhiều lần, dấu sao nghĩa là không hoặc nhiều lần, còn dấu hỏi nghĩa là tùy chọn. Bạn cũng có thể chỉ định một số lượng chính xác hay một khoảng bằng dạng dấu ngoặc nhọn, chẳng hạn khi cần một giá trị lặp lại từ hai đến bốn lần.
Phép hoặc với dấu gạch đứng mang nghĩa “hoặc” — một mẫu khớp cat hoặc dog sẽ khớp với một trong hai từ. Hãy bọc các lựa chọn trong dấu ngoặc đơn để giới hạn phạm vi của phép chọn. Theo mặc định, bộ định lượng có tính tham lam, vơ lấy càng nhiều càng tốt; thêm một dấu hỏi sau một bộ định lượng để biến nó thành lười và khớp càng ít càng tốt, đây thường là cách khắc phục khi một mẫu vốn định bắt một thẻ lại nuốt trọn mọi thứ cho đến tận thẻ cuối cùng trên dòng.
Nhóm bắt và cách sử dụng
Dấu ngoặc đơn đảm nhận hai vai trò: chúng nhóm một phần của mẫu lại với nhau, đồng thời bắt lấy phần mà đoạn đó đã khớp. Sau một kết quả khớp, các mảnh đã bắt được sẽ sẵn sàng dưới dạng các nhóm được đánh số — cặp ngoặc đơn đầu tiên là nhóm một, cặp tiếp theo là nhóm hai — và danh sách kết quả ở đây hiển thị từng nhóm để bạn xác nhận mình đang tách ra đúng đoạn mình muốn. Một mẫu cho một chuỗi giống email với các cặp ngoặc đơn riêng quanh phần tên cục bộ, phần tên miền và phần đuôi mở rộng sẽ cho phép bạn đọc lại từng mảnh trong ba mảnh đó một cách riêng lẻ.
Nhóm có tên, được viết bằng cú pháp đặt một cái tên trong dấu ngoặc góc ngay sau dấu ngoặc đơn mở, gán cho các phần bắt được những nhãn dễ đọc thay vì những con số trơ trụi, và chúng xuất hiện trong một mục riêng. Khi bạn chỉ muốn nhóm lại mà không cần gánh nặng của việc bắt, một nhóm không bắt — một dấu ngoặc đơn mở theo sau là một dấu hỏi và một dấu hai chấm — sẽ giữ cho số thứ tự các nhóm của bạn gọn gàng. Những phần bắt được này cũng chính là thứ mà bước thay thế của bạn tham chiếu đến.
Cờ thay đổi toàn bộ kết quả khớp
Cờ là các bộ điều chỉnh làm thay đổi cách áp dụng toàn bộ mẫu. Global tìm mọi kết quả khớp thay vì dừng lại ở kết quả đầu tiên, điều này thiết yếu khi bạn muốn thay thế tất cả các lần xuất hiện chứ không chỉ một. Ignore-case khiến các chữ cái khớp với nhau bất kể viết hoa hay viết thường. Multiline định nghĩa lại các dấu neo dấu mũ và dấu đô la để chúng khớp ở mỗi vị trí xuống dòng thay vì chỉ ở vị trí đầu và cuối của đầu vào.
Các cờ còn lại tùy theo tình huống nhưng vẫn rất quan trọng. Dotall cho phép dấu chấm khớp cả ký tự xuống dòng, nhờ đó một mẫu có thể trải dài qua nhiều dòng. Unicode bật xử lý Unicode đầy đủ cho các điểm mã nằm ngoài dải cơ bản và cho các thuộc tính Unicode escape. Sticky neo mỗi kết quả khớp vào vị trí ngay sau kết quả trước đó, đó là cách các bộ tách token đi qua đầu vào mà không nhảy vượt lên phía trước. Hãy bật/tắt các cờ ở đây và quan sát các kết quả khớp được tô sáng thay đổi để dần cảm nhận được tác dụng của từng cờ một.
Những mẫu bạn sẽ viết thường xuyên
Một vài hình dạng xuất hiện đi xuất hiện lại. Việc rút tất cả các số nguyên ra khỏi một đống văn bản chính là backslash-d lặp lại một hoặc nhiều lần kèm cờ Global. Một phép kiểm tra email sơ bộ gồm một hoặc nhiều ký tự từ, một dấu @, một hoặc nhiều ký tự từ, một dấu chấm nguyên văn, và một đoạn ngắn các chữ cái — đủ dùng cho một bộ lọc kiểm tra nhanh, dù được cố ý để lỏng lẻo. Cắt bớt hay nén các chuỗi khoảng trắng, kiểm tra một slug gồm các chữ cái thường và dấu gạch ngang, và trích xuất nội dung nằm giữa hai dấu mốc đều là những công việc thường ngày.
Hãy cưỡng lại cám dỗ kiểm tra những định dạng thật sự phức tạp bằng một mẫu khổng lồ duy nhất. Ngữ pháp của email và URL nói riêng nổi tiếng là khó nắm bắt trọn vẹn trong một regex; với những trường hợp đó, một mẫu lỏng kết hợp cùng một bộ phân tích cú pháp thực thụ hay một thư viện chuyên dụng thường tốt hơn một biểu thức rối rắm mà sáu tháng sau bạn sẽ ngại đụng vào.
Quay lui thảm họa và cách tránh nó
Cơ chế quay lui của bộ máy chính là thứ làm nên sức mạnh của regex, nhưng nó cũng có thể khiến một mẫu bùng nổ. Khi hai phần được định lượng của một mẫu có thể khớp cùng những ký tự theo nhiều cách chồng lấn nhau — một ví dụ kinh điển là một nhóm mà bản thân nó lại được lặp lại, khiến sự lặp lại bên trong và bên ngoài cạnh tranh với nhau — bộ máy có thể thử một số lượng tổ hợp khổng lồ trên một chuỗi mà rốt cuộc vẫn không khớp. Với một đầu vào dài, điều này có thể khiến công cụ treo trong vài giây hoặc treo cứng hoàn toàn, và trên một máy chủ nó trở thành một hướng tấn công từ chối dịch vụ được biết đến với tên ReDoS.
Các biện pháp phòng vệ mang tính cấu trúc. Hãy tránh lồng một bộ định lượng bên trong một bộ định lượng khác có thể khớp cùng một thứ, ưu tiên các lớp ký tự cụ thể hơn thay vì một dấu chấm dễ dãi để mỗi bước chỉ có một cách tiêu thụ đầu vào, và hãy neo mẫu lại khi có thể. Nếu buộc phải thử một mẫu rủi ro, hãy làm điều đó tại đây trước với một chuỗi tình huống xấu nhất sát thực tế, nơi một mẫu mất kiểm soát chỉ khiến bạn mất một tab trình duyệt chứ không phải một sự cố ngừng hoạt động trên môi trường vận hành.
Xem trước nội dung thay thế một cách an toàn
Tìm-và-thay-thế là nơi regex chứng tỏ giá trị mỗi ngày, và ô nội dung thay thế cho phép bạn xem trước kết quả trước khi áp dụng nó ở bất cứ đâu. Hãy tham chiếu các nhóm bắt của bạn trong nội dung thay thế bằng một dấu đô la và số thứ tự nhóm — dollar-one chèn vào bất cứ thứ gì mà nhóm đầu tiên đã khớp — nhờ đó bạn có thể sắp xếp lại một ngày tháng, định dạng lại một cái tên, hay bọc các kết quả khớp trong thẻ đánh dấu. Hãy nhớ rằng nếu không có cờ Global thì chỉ kết quả khớp đầu tiên được thay thế; hãy bật Global để biến đổi mọi lần xuất hiện.
Mọi thứ đều chạy cục bộ trong trình duyệt của bạn bằng bộ máy gốc, nên không có gì bạn dán vào — các dòng nhật ký, mã nguồn, dữ liệu khách hàng — bị tải lên, ghi lại hay lưu trữ. Điều đó biến trình kiểm tra này thành một nơi an toàn để bạn tinh chỉnh trên một mẫu dữ liệu thực tế cho đến khi cả các kết quả khớp lẫn kết quả thay thế đều chính xác tuyệt đối, rồi sao chép mẫu đã hoàn thiện vào mã của bạn một cách tự tin.
Câu hỏi thường gặp
Biểu thức chính quy là gì?
Trình kiểm tra này dùng biến thể regex nào?
Các cờ có ý nghĩa gì?
Nhóm bắt hoạt động như thế nào?
Dữ liệu của tôi có được gửi đến máy chủ không?
Công cụ liên quan
Tiếp tục với những công cụ hữu ích này