Làm thế quái nào tôi giải quyết chúng?
Giống như bất kỳ điều mới:
10 Study
20 Practice
30 goto 10
Học
Tôi thấy rằng hầu hết các giáo viên thành công bắt đầu dạy bất kỳ môn học nào bằng cách trước tiên cung cấp một chút nền tảng cho môn học. Điều quan trọng là có bối cảnh về những gì bạn đang học và quan trọng nhất là tại sao bạn học nó.
Đó là tất cả khớp chuỗi
Biểu thức chính quy là một phương tiện kết hợp các mẫu trong văn bản. Đó là một ngôn ngữ khai báo tự nó được tích hợp vào nhiều ngôn ngữ lập trình khác.
Tôi muốn nhấn mạnh rằng đó là một ngôn ngữ khai báo, biểu thức thông thường là hữu ích để thể hiện những gì chuỗi để phù hợp, nhưng họ không dưới mọi hình thức thể hiện như thế nào chương trình là để đi về làm việc phù hợp. Vì lý do này, có thể sử dụng các biểu thức chính quy rất nhanh và rất chậm trong cùng một ngôn ngữ lập trình chỉ bằng cách sử dụng trình phân tích cú pháp RegEx khác.
Lý do tạo các biểu thức chính quy là giống nhau cho việc tạo ra hầu hết các ngôn ngữ lập trình: các lập trình viên thấy mình thực hiện cùng một nhiệm vụ phức tạp và quyết định rằng họ muốn một cách viết mã đơn giản hơn.
Một số người sẽ (và nên) phàn nàn về câu trước của tôi bằng cách nói điều gì đó dọc theo dòng:
RegEx không làm cho chương trình đơn giản hơn.
đúng rồi
RegEx không làm cho chương trình trở nên đơn giản hơn, RegEx giúp việc viết chương trình đơn giản hơn. Bạn vẫn cần phải kỹ lưỡng trong thử nghiệm của mình để chắc chắn rằng tất cả các trường hợp chính xác đều được khớp chính xác, và tất cả các trường hợp không chính xác thì không. Thật khó để kiểm tra "tất cả", và với các mẫu phức tạp, thật khó để kiểm tra "hầu hết". Tệ nhất, bạn vẫn nên thử nghiệm "một số" trường hợp.
hãy kết hợp một số ví dụ mà tôi bắt buộc phải chọn công cụ RegEx của JavaScript vì tôi có thể kiểm tra nó trực tiếp trên trình duyệt một cách dễ dàng và vì tôi sẽ không phải thực hiện bất kỳ chuỗi thoát nào trong khi sử dụng bằng chữ RegEx.
Khi bạn thực hiện khớp chuỗi bình thường, bạn kiểm tra một giá trị chuỗi so với chuỗi khác. Chúng có thể đến từ bất cứ đâu, nhưng cuối cùng, phải mất hai chuỗi được so sánh với nhau:
if ( 'foo' == 'bar' ) doSomething();
Ví dụ đó thật tệ vì nó sẽ không bao giờ làm gì cả
if ( foo == 'bar' ) doSomething();
Tốt hơn nhiều; Bây giờ, chúng ta không thực sự biết trước liệu có nên làm điều gì đó hay không. Bây giờ chúng tôi có thể bắt đầu chấp nhận đầu vào của người dùng:
if ( prompt( 'Say "bar" to do something.' ) == 'bar' ) doSomething();
Thật tuyệt vời, giờ đây người dùng có thể nhập bar
và điều gì đó sẽ xảy ra, cho đến khi bạn nhận được báo cáo lỗi từ người dùng nói rằng "bar"
nó không hoạt động hoặc "BAR" không hoạt động hoặc họ đã gõ BRA
100 lần và không có gì xảy ra.
Bỏ qua lỗi chính tả và các ký tự phụ 'bar' != 'BAR'
, và các lập trình viên cần nghĩ ra cách kiểm tra xem các ký tự là trường hợp sai.
Giải pháp đơn giản, sử dụng toLowerCase
. Điều đó làm việc tuyệt vời, nhưng những người dùng của chúng tôi đang sử dụng tiếng Anh Anh hơn tiếng Anh Mỹ khi bạn kết hợp something == 'color'
thì sao? Bây giờ bạn sẽ phải phù hợp something == 'color' || somthing == 'colour'
.
Câu chuyện dài, các mẫu đơn giản biến thành rất nhiều mã lặp đi lặp lại rất nhanh.
Ví dụ màu có thể được kết hợp đơn giản với:
/colou?r/.test( something )
một sự hiểu biết vững chắc về những điều cơ bản của các biểu thức thông thường có thể làm giảm đáng kể lượng thời gian bạn lãng phí khi phát minh lại bánh xe.
Học ở đâu
Hầu hết các ngôn ngữ triển khai biểu thức chính quy đều có ít nhất một tài nguyên có sẵn cho cú pháp cụ thể sử dụng biểu thức chính quy trong ngôn ngữ đó. Một cho JavaScript có thể được tìm thấy trên MDN
đọc nó.
tất cả.
sau đó đọc lại
Phải mất thời gian để tìm hiểu, hãy coi đó là một khoản đầu tư: một giờ để học RegEx giờ sẽ tiết kiệm được một giờ vào lần tiếp theo bạn cần thực hiện một số mô hình chuỗi khớp, và sau đó một giờ nữa vào lần sau.
Thực hành
Sau khi đọc tất cả về RegEx, có lẽ bạn sẽ không hiểu hầu hết về nó. Đó là bởi vì bạn không thực sự làm bất cứ điều gì với nó.
Tôi đã đề cập đến lý do tại sao tôi chọn JS cho ví dụ này, tôi khuyên bạn nên làm phiền nó trong trình duyệt của bạn. Thật nhanh chóng và bạn có thể làm điều đó ngay trong thanh URL của mình.
JS có một vài cách khác nhau và đơn giản để sử dụng RegEx:
string.match( regex )
regex.exec( string )
regex.test( string )
Bắt đầu với một cái gì đó đơn giản như:
javascript:'color'.match(/colou?r/);
là một cách dễ dàng để có được chân của bạn trong cửa. Chơi với nó, phá vỡ nó xem những gì phù hợp, và những gì không.
Khi bạn gặp khó khăn trong thực hành, tiếp tục 30
. Bạn cần đọc để tìm hiểu thêm, nhưng bạn cần thực hành để thực sự hiểu những gì bạn đã học.