Wyrażenia regularne
Wyrażenie regularne to szablon tekstowy, wzorzec, który opisuje pewien zestaw znaków.
Przykład
Na przykład adres e-mail powinien zawierać znak @, przed którym ciąg znaków nie może zawierać spacji oraz znaków ?,:*/, po znaku małpki powinna się znaleźć przynajmniej jedna kropka, a po kropce muszą się znaleźć co najmniej 2 litery. To jest właśnie wzorzec.
W JavaScript wyrażenie regularne tworzymy na dwa sposoby, oba są równorzędne:
<script> var wyrazenie = new RegExp("wyrażenie","flagi") // lub var wyrazenie = /wyrażenie/flagi </script>
Wyrażenie składa się z metaznaków, czyli znaków specjalnych, które opisują, jak ma wyglądać wyszukiwany fragment łańcucha.
Metaznaki
Poniższa tabela zawiera wykaz metaznaków wraz z przykładami. Pogrubioną czcionką w przykładach zaznaczono dopasowanie, pogrubioną czerwona czcionką - brak dopasowania do wzorca.
Metaznak | Opis | Przykład wyrażenia | Przykłady zgodnych wyrażeń | Przykłady wyrażeń nie pasujących do wzorca |
^ | Początek wzorca. To bardzo ważny metaznak. Jeżeli użyjemy go na początku wyrażenia, wówczas mamy pewność, że przed poszukiwanym fragmentem pasującym do wzorca nie ma żadnego znaku. | ^kr | krzyk,krezus, kruk, krowa | Kraków, kos, mgła. |
$ | Koniec wzorca. To bardzo ważny metaznak. Jeżeli użyjemy go na końcu wyrażenia, wówczas mamy pewność, że za poszukiwanym fragmentem pasującym do wzorca nie ma żadnego znaku. | ra$ | pora, mara, komora | kamrat, kula, karo |
. | Pojedynczy znak | ^k.r.$ | kort, kara, kura | kur (brak na końcu litery), kula, lura |
[...] | Dowolny z wymienionych znaków w nawiasach lub z zakresu znaków lub znaków specjalnych (bez znaku \). [a-z] - wszystkie małe litery. [A-Z] - wszystkie wielkie litery. [A-z] - wszystkie litery. [0-9] - wszystkie cyfry. |
^[A-Z]po[a-z][a-z]$ | Opole, Opona, Opoka | opona,Opos1, Spodek |
[^...] | Dowolne znaki, które nie zostały wymienione w nawiasie (negacja). | ko[^rstz] | kom, koc, kod | koz, kos, kot |
| | Dowolny z teksów pomiędzy znakiem | (działa jak słowo lub). | kot|pies | kot, pies | mysz, kotek |
(...) | Powoduje zawężenie zasięgu, zgrupowanie. | (for|4)tel | fortel, 4tel | fotel |
? | Co najwyżej (0 lub 1) jeden poprzedzający znak lub wyrażenie umieszczone w (...). | (pierwszy |1(-szy)?)maja? | 1maja, 1-maja, pierwszy maja, pierwszy maj | |
+ | Jeden lub więcej poprzedzających znaków lub elementów np. (...). | wan+a
(la)+ |
wana, wanna, wannnnna la, lala, lalalalala |
|
* | Zero lub więcej poprzedzających znaków lub elementów np. (...). | par*k [0-9]*[a-d] |
park, pak, parrk, parrrk 1c, 1000c, a,c,d |
|
{n} | Dokładnie n poprzedzających elementów. | [0-4]{2} | 00, 44, 33, 21, 01, 10 | 4, 444, 55, 643234545 |
{n} | Dokładnie n lub więcej poprzedzających elementów. | [0-4]{2,} | 00, 44, 33, 212, 33333 | 4, 55, 0 |
{m,n} | Od m do n poprzedzających elementów. | [0-4]{2,3} | 00, 000, 012, 31, 444 | 00000, 4443, 3, 555 |
Jeżeli chcemy użyć w wyrażeniu regularnym jednego ze znaków specjalnych takich jak ., *, /, ?, :, ., ^, +, \, =, |, to poprzedzamy go znakiem "\".
Polskie znaki
Aby ująć w zestawie także polskie znaki należy zastosować wyrażenie:
[a-ZąćęłńóśźżĄĘŁŃÓŚŹŻ]
Mamy teraz zestaw wszystkich wielkich i małych liter oraz znaków charakterystycznych dla języka polskiego.
Flagi
W wyrażeniach regularnych można stosować następujące flagi:
Metaznak | Opis |
i | Ignorowanie wielkości liter |
g | Zwracaj wszystkie pasujące fragmenty, a nie tylko pierwszy |
m | Szukaj w tekście złożonym z kilku linii. |
Specjalne klasy znaków
JavaScript udostępnia następujące klasy znaków w postaci:
Klasa | Opis\ |
\s | Spacja, tabulator lub znak nowego wiersza |
\S | Znak, który nie jest spacją, tabulatorem lub znakiem nowego wiersza |
\w | Litera, cyfra lub znak "_" (zapis równoważny [A-Za-z_] |
\W | Znak, który nie jest literą, cyfrą lub "_" |
\d | Cyfra (zapis równoważny [0-9]) |
\D | Znak, który nie jest cyfrą |
\b | Dowolny znak odstępu, początku łańcucha, końca łańcucha oraz dowolnego znaku, który nie jest ani literą, ani cyfrą. Symbolu tego używa się do dopasowania początku lub końca słowa. |
Zastosowanie wyrażeń regularnych
Teraz zajmiemy się zastosowaniami wyrażeń regularnych w JavaScript.
Test();
Metoda test() umożliwia sprawdzenie, czy wyspecyfikowane wyrażenie regularne występuje w naszym tekście. Zastosujemy tę metodę do przykładu z naszej tabeli. Wystarczy, że metoda test() znajdzie choć jedno wystąpienie ciągu znaków, spełniające wyrażenie regularne.
Przykład 1 - przykład zastosowania metody test.
Zmieniając w swoim skrypcie tekst i wyrażenie możesz przetestować wiele innych wyrażeń regularnych.
<script> var tekst = "Kraków"; var wyrazenie = /^kr/; if (wyrazenie.test(tekst) === true) {alert('pasuje');} else {alert('nie pasuje');} </script>
Przykład 2 - przykład zastosowania metody test
A oto inny przykład.
<script> var tekst = "Spodek"; var wyrazenie = /^[A-Z]po[a-z][a-z]$/; if (wyrazenie.test(tekst) === true) {alert('pasuje');} else {alert('nie pasuje');} </script>
Match();
Metoda match(); zwraca wszystkie pasujące do wzorca fragmenty ciągu znaków i rozdziela je przecinkami. Podobnie działa metoda exec(), z ta różnicą, że exec() zwraca tablicę zawierającą składowe wyszukanego fragmentu.
Przykład 3 - przykład zastosowania metody match
Wyrażenie regularne pozwala wyszukać ciąg znaków "Jan" i jeden lub więcej poprzedzających znaków z zestawu [A-z], czyli szukamy imienia i nazwiska zaczynającego się od imienia Jan.
<script> var tekst = "Jan Kowalski, Piotr Kowalski, Jan Miodek, Tomasz Miodek"; var wyrazenie = /Jan [A-z]+/g; alert(tekst.match(wyrazenie)); </script>
Inne metody wykorzystywane przy wyrażeniach regularnych
Z wyrażeniami regularnymi zwykle wiążą sie następujące metody:
tekst.search(wyrazenie) - zwraca indeks pierwszego wystąpienia wzorca wyrazenie w tekście tekst;
tekst.replace(wyrazenie,nowy_tekst) - zamienia w tekście tekst wystąpienie wzorca wyrazenie na nowy_tekst;
Często wykorzystywane wyrażenia regularne
W poniższej tabeli zapisano często wykorzystywane wyrażenia regularne do sprawdzenia prawidłowości zapisu postaci ciągu znaków:
Wyrażenie | Opis |
\d{2}-\d{3} lub [0-9]{2}-[0-9]{3} | Kod pocztowy |
[-\w.]+@([A-z0-9][-A-z-9]+\.)+[A-z]{2,4} | Adres e-mail |
((\bhttps?:\/\/)|(\bwww\.))\S* | Adres strony internetowej |
Testowanie wyrażeń regularnych
Polecam tester wyrażeń regularnych na stronie http://www.wykop.pl/ramka/472445/regexp-pl-tester-wyrazen-regularnych-regular-expressions/.
Inne zagadnienia z tej lekcji
Instrukcje warunkowe w JavaScript
instrukcje warunkowe w JavaScript. JavaScript udostępnia kilka instrukcji warunkowych, czyli takich, które w zależności od wartości wyrażenia sterują przebiegiem programu.
Pętle w JavaScript
Pętle for, while, do ... while w JavaScript. Pętle to specjalny fragment kodu, który odpowiada za powtarzanie poleceń zawartych wewnątrz pętli taką ilość razy, jaka w pętli zostanie zdefiniowana poprzez odpowiednie warunki.
Funkcje w JavaScript
Funkcje w JavaScript - jak stosować, co to jest funkcja anonimowa? Funkcje to w JavaScript bardzo wygodny sposób na wielokrotne wykorzystanie tego samego kodu i to w sposób sparametryzowany.
Tablice w JavaScript
Tablice w JavaScript - opis stosowania tablic i ich metod. Tablice w JavaScript, to specjalny typ danych, który pozwala w jednej zmiennej przechowywać wiele wartości.
Math - JavaScript
Opis obiektu Math w JavaScript. Dzięki niemu możemy w JavaScript odwoływać się do stałych matematycznych i dokonywać obliczeń. Wykaz metod, które służą do obliczania wartości funkcji matematycznych.
Random w JavaScript
liczby losowe w JavaScript - opis metody random(). Za generowanie liczb losowych odpowiada metoda Random obiektu Math. Metoda ta generuje losowo liczbę z zakresu od 0 (włącznie) do 1 (bez jedynki).
Okna dialogowe w JavaScript
Rodzaje i stosowanie okienek dialogowych w Javascript. W JavaScript mamy do wyboru trzy rodzaje okienek dialogowych, wyzwalanych przez metody alert(), confirm() i prompt().
String - tekst w JavaScript
Opis obiektu String w JavaScript. Dzięki temu obiektowi możemy w JavaScript przechowywać i przetwarzać wszelkie teksty. Znaki w tekście są indeksowane od liczby 0.
Obiekt date() - data i czas w JavaScript
Obsługa dat i czasu w JavaScript. W JavaScript mamy do dyspozycji obiekt date(), który daje nam możliwość dostępu do dat i manipulowania datami oraz czasem.
© medianauka.pl, 2016-12-25, A-3351