Hướng dẫn cho người mới bắt đầu về biểu hiện thường xuyên (Regex)
Biểu thức chính quy là một tập hợp các ký tự tạo thành một mẫu có thể được tìm kiếm trong một chuỗi. Regex có thể được sử dụng cho xác nhận chẳng hạn như để xác nhận số thẻ tín dụng, cho Tìm kiếm tức là thông qua các kết hợp văn bản phức tạp và cho thay thế văn bản phù hợp với một chuỗi khác. Nó cũng có hỗ trợ đa ngôn ngữ tuyệt vời - học một lần và bạn có thể sử dụng nó trên nhiều ngôn ngữ lập trình.
Tôi đã thấy vài người có cái nhìn đầu tiên về regex và bỏ qua nó hoàn toàn. Tôi không đổ lỗi cho họ; Cú pháp của regex rất phức tạp và sẽ làm cho nhiều trường hợp giống như các ngôn ngữ dòng lệnh đó, chỉ tệ hơn. Nhưng sau đó mọi thứ mới đều đáng sợ và dường như không thể học được lúc đầu. Vì vậy, mượn lời của Horatius tôi sẽ nói điều này; Bắt đầu, táo bạo và mạo hiểm để trở nên khôn ngoan.
Về Regex
Regex có nguồn gốc từ khoa học thần kinh và toán học và chỉ được triển khai trong lập trình vào năm 1968 bởi Ken Thompson trong trình soạn thảo văn bản QED để tìm kiếm văn bản. Bây giờ nó là một phần của nhiều ngôn ngữ lập trình như Perl, Java, Python, Ruby và JavaScript.
Hãy xem xét một số ví dụ về cách regex hoạt động.
Tôi sẽ sử dụng JavaScript trong các ví dụ của mình. Bây giờ, để vượt qua cấp độ mới bắt đầu, bạn cần phải học tất cả ký tự, lớp, định lượng, sửa đổi và phương thức được sử dụng trong regex. Đây là một liên kết đến trang Biểu thức chính quy của Mozilla Developer Network, nơi bạn có thể xem một bảng có chứa tất cả các bảng. Bạn cũng có thể tham khảo chiếc áo choàng ở cuối bài này với các ký tự được sử dụng nhiều nhất.
Hãy xem một ví dụ đơn giản với một lời giải thích. Đây là một regex.
Đây là những gì mà regex ở trên sẽ tìm kiếm trong một dòng, một ký tự 'B' được theo sau bởi ít nhất một trong số bất kỳ ký tự nào giữa (và bao gồm) 'a' đến 'z', 'A' đến 'Z' và số 0 đến 9.
Đây là một mẫu các trận đấu trong một dòng được tô sáng:
Cái rổ, bóng đèn, B12 vitamin, BaSO4, N BC Công ty
Regex ở trên sẽ dừng tìm kiếm tại Cái rổ và trả lại một phản ứng tích cực. Đó là bởi vì công cụ sửa đổi toàn cầu 'g
'phải được chỉ định nếu bạn muốn regex xem xét tất cả các trận đấu có thể.
Bây giờ, hãy xem cách sử dụng biểu thức này trong JavaScript. Các kiểm tra
phương thức đi: nếu tìm thấy một kết quả khớp thật
, khác sai
.
var input = "chuỗi thử nghiệm của bạn", regex = / B [a-zA-Z \ d] + /; cảnh báo if (! regex.test (input)) ('Không tìm thấy kết quả khớp'); cảnh báo khác ('Một trận đấu được tìm thấy');
Hãy thử một phương pháp khác: trận đấu
trả về các kết quả tìm thấy trong một mảng.
var input = "chuỗi thử nghiệm của bạn", regex = / B [a-zA-Z \ d] + / g, / * Tôi đã thêm công cụ sửa đổi toàn cầu 'g' vào regex để có được tất cả các kết quả khớp * / ary = input.match (regex); if (ary === null) alert ('Không tìm thấy kết quả khớp'); cảnh báo khác ('kết quả là:' + ary.toString ());
Chuỗi như thế nào thay thế
? Hãy thử điều đó với regex ngay bây giờ.
var input = "chuỗi thử nghiệm của bạn", regex = / B [a-zA-Z \ d] + / g; cảnh báo (input.replace (regex, "#"));
Dưới đây là một codepen để bạn tinh chỉnh. Nhấp vào tab "JavaScript" để xem mã JS.
Bài tập
Đối với bài tập, bạn có thể google “bài tập regex” và thử giải quyết chúng. Đây là những gì mong đợi khi thử các bài tập này, theo mức độ khó.
Căn bản
Đối với tôi có thể xác thực mật khẩu là đủ cho người mới bắt đầu. Vì vậy, xác thực mật khẩu cho độ dài 8 đến 16 ký tự, chữ và số với sự lựa chọn của bạn về các ký tự đặc biệt được phép.
Trung gian
Đây là nơi bạn nên thực hành với nhiều dữ liệu trong thế giới thực hơn và tìm hiểu thêm vài điểm regex như nhìn, khẳng định và nhóm phù hợp;
- Xác thực mã PIN, hexadecimals, ngày, ID email, dấu phẩy động.
- Thay thế dấu 0, khoảng trắng, một tập hợp các từ phù hợp
- Trích xuất các phần khác nhau của một URL
Nâng cao
Bạn có thể tối ưu hóa các giải pháp của các bài tập trên - regex tối ưu nhất cho email có hàng ngàn ký tự trong đó - vì vậy mang nó đi xa như bạn cảm thấy thoải mái và thế là đủ. Bạn cũng có thể thử:
- Phân tích cú pháp HTML hoặc XML (mặc dù trong thế giới thực, không khuyến khích làm như vậy bởi vì sử dụng biểu thức chính quy để phân tích ngôn ngữ không thông thường như HTML sẽ không bao giờ làm cho nó trở nên khó hiểu.
- Thay thế thẻ
- Xóa bình luận (trừ các bình luận có điều kiện IE)
Công cụ
Công cụ để hình dung regex là một trong những điều tuyệt vời nhất đối với tôi. Nếu bạn từng gặp một regex phức tạp dài, chỉ cần sao chép dán chúng vào một trong những công cụ đó và bạn sẽ có thể xem luồng rõ ràng. Bên cạnh đó, có nhiều công cụ mà bạn có thể sử dụng để sử dụng mã regex. Họ cũng giới thiệu các ví dụ và cheatheets cùng với các tính năng chia sẻ.
- Debuggex - Nó vẽ sơ đồ regex theo đầu vào của bạn và bạn có thể chia sẻ nhanh lên StackOverflow ngay từ đó.
- RegExr - Bạn có thể kiểm tra regex của mình với cái này. Nó cũng có tài liệu tham khảo, một chiếc áo choàng và các ví dụ để giúp bạn hiểu.
- Refiddle - Hiện tại, ngoài JavaScript, bạn cũng có thể sử dụng phiên bản regex của Ruby và .NET trong đó.
Áo choàng Regex
Mã thông báo | Định nghĩa |
[abc] | Bất kỳ ký tự đơn a, b hoặc c |
[^ abc] | Bất kỳ ký tự nào khác ngoài a, b hoặc c |
[a-z] | Ký tự giữa (bao gồm) a đến z |
[^ a-z] | Ký tự ngoại trừ từ a đến z |
[A-Z] | Ký tự giữa (bao gồm) A đến Z |
. | Bất kỳ nhân vật duy nhất |
\S | Bất kỳ ký tự khoảng trắng |
\S | Bất kỳ ký tự không phải khoảng trắng |
\ d | Bất kỳ chữ số 0 đến 9 |
\ D | Bất kỳ chữ số nào |
\ w | Bất kỳ ký tự từ (chữ, số & gạch dưới) |
\ | Bất kỳ ký tự không từ |
(Càng) | Chụp mọi thứ kèm theo |
(a | b) | Khớp a hoặc b |
một? | Nhân vật a vắng mặt hoặc có mặt một lần |
một * | Nhân vật a vắng mặt hoặc có mặt nhiều lần |
một+ | Nhân vật a có mặt một hoặc nhiều lần |
một 3 | 3 lần xuất hiện của nhân vật liên tiếp |
một 3, | 3 hoặc nhiều lần xuất hiện của nhân vật liên tiếp |
một 3,6 | 3 đến 6 lần xuất hiện của nhân vật liên tiếp |
^ | Bắt đầu chuỗi |
$ | Kết thúc chuỗi |
\ b | Một ranh giới từ. Nếu một ký tự là ký tự từ cuối cùng hoặc đầu tiên của từ hoặc Nếu một ký tự nằm giữa một từ hoặc ký tự không phải từ |
\ B | Ranh giới không từ |