Jak do cholery mam je rozwiązać?
Jak każda nowa rzecz:
10 Study
20 Practice
30 goto 10
Badanie
Uważam, że najbardziej udani nauczyciele zaczynają uczyć dowolnego przedmiotu, najpierw zapewniając mu trochę tła. Ważne jest, aby mieć kontekst tego, czego się uczysz i, co najważniejsze, dlaczego się tego uczysz.
Wszystko pasuje do ciągów
Wyrażenia regularne są sposobem dopasowania wzorców w tekście. Jest to sam język deklaratywny włączony do wielu innych języków programowania.
Chciałbym podkreślić, że jest to język deklaratywny, wyrażenia regularne są przydatne do wyrażania tego, co ciąg pasuje, ale tak nie jest w żaden sposób wyrazić , jak program ma zabrać dopasowanie. Z tego powodu można używać wyrażeń regularnych bardzo szybko i bardzo powoli w tym samym języku programowania, po prostu używając innego parsera RegEx.
Powód tworzenia wyrażeń regularnych jest taki sam przy tworzeniu większości języków programowania: programiści wielokrotnie powtarzali to samo skomplikowane zadanie i zdecydowali, że chcą prostszego sposobu pisania kodu.
Niektórzy będą (i powinni) narzekać na moje poprzednie zdanie, mówiąc coś w stylu:
RegEx nie upraszcza programu.
to prawda
RegEx nie upraszcza programu, RegEx ułatwia pisanie programu. Nadal musisz być dokładny w testowaniu, aby mieć pewność, że wszystkie poprawne przypadki są poprawnie dopasowane, a wszystkie niepoprawne przypadki nie. Naprawdę trudno jest przetestować „wszystko”, a przy skomplikowanych wzorach naprawdę trudno jest przetestować „większość”. W najgorszym przypadku powinieneś nadal testować „niektóre” przypadki.
uwzględnijmy kilka przykładów Obowiązkowo wybrałem silnik RegEx JavaScript, ponieważ mogę go łatwo przetestować na żywo w przeglądarce i ponieważ nie będę musiał robić żadnych znaków ucieczki podczas używania literałów RegEx.
Podczas normalnego dopasowywania łańcucha testowana jest jedna wartość łańcucha względem drugiego. Mogą pochodzić z dowolnego miejsca, ale w końcu porównuje się dwa łańcuchy:
if ( 'foo' == 'bar' ) doSomething();
Ten przykład jest do kitu, ponieważ nigdy nic nie da
if ( foo == 'bar' ) doSomething();
Dużo lepiej; teraz nie wiemy z góry, czy coś zostanie zrobione. Możemy teraz zacząć akceptować dane wejściowe użytkownika:
if ( prompt( 'Say "bar" to do something.' ) == 'bar' ) doSomething();
Wspaniale, teraz użytkownicy mogą wprowadzać dane bar
i coś się stanie, dopóki nie otrzymasz od użytkowników raportów o błędach, które mówią, że "bar"
to nie działa lub że „BAR” nie działa lub że napisali BRA
100 razy i nic się nie dzieje.
Ignorując błędy ortograficzne i dodatkowe znaki, 'bar' != 'BAR'
a programiści muszą wymyślić sposób na sprawdzenie, czy postacie są niewłaściwe.
Proste rozwiązanie, użyj toLowerCase
. Działa to wspaniale, ale co z naszymi użytkownikami, którzy używają brytyjskiego angielskiego zamiast amerykańskiego angielskiego podczas dopasowywania something == 'color'
? Teraz będziesz musiał dopasować something == 'color' || somthing == 'colour'
.
Krótka historia, proste wzory bardzo szybko zamieniają się w wiele powtarzalnych kodów.
Przykład koloru można po prostu dopasować do:
/colou?r/.test( something )
solidne zrozumienie podstaw wyrażeń regularnych może znacznie skrócić czas wymyślania nowego koła.
Gdzie studiować
Większość języków, które implementują wyrażenia regularne, ma co najmniej jeden zasób dostępny dla określonej składni użycia wyrażeń regularnych w tym języku. Jeden dla JavaScript można znaleźć w MDN
Przeczytaj to.
wszystko.
następnie przeczytaj to jeszcze raz.
Nauczenie się zajmuje trochę czasu, pomyśl o tym jak o inwestycji: godzina nauki RegEx oszczędza teraz godzinę, gdy następnym razem będziesz musiał dopasować ciąg znaków, a następnie kolejną godzinę następnym razem.
Ćwiczyć
Po przeczytaniu wszystkiego o RegEx, prawdopodobnie nie zrozumiesz większości z nich. To dlatego, że tak naprawdę nic z tym nie robisz .
Wspomniałem, dlaczego wybrałem JS w tym przykładzie, wzywam do zepsucia go w przeglądarce. Jest szybki i możesz to zrobić bezpośrednio na pasku adresu URL.
JS ma kilka różnych i prostych sposobów korzystania z RegEx:
string.match( regex )
regex.exec( string )
regex.test( string )
Począwszy od czegoś prostego, takiego jak:
javascript:'color'.match(/colou?r/);
jest łatwym sposobem na postawienie stopy w drzwiach. Graj z nim, rozbij, aby zobaczyć, które pasują, a co nie.
Kiedy utkniesz w praktyce, kontynuuj 30
. Musisz przeczytać, aby dowiedzieć się więcej, ale musisz poćwiczyć, aby naprawdę zrozumieć to, czego się nauczyłeś.