Logo Media Nauka
Sklep naukowy

Wyrażenia regularne

Wyrażenie regularne to szablon tekstowy, wzorzec, który opisuje pewien zestaw znaków.

Przykład 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 OpisPrzykład wyrażeniaPrzykł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, kurakur (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
iIgnorowanie wielkości liter
gZwracaj wszystkie pasujące fragmenty, a nie tylko pierwszy
mSzukaj 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\
\sSpacja, tabulator lub znak nowego wiersza
\SZnak, który nie jest spacją, tabulatorem lub znakiem nowego wiersza
\wLitera, cyfra lub znak "_" (zapis równoważny [A-Za-z_]
\WZnak, który nie jest literą, cyfrą lub "_"
\dCyfra (zapis równoważny [0-9])
\DZnak, 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>
Lupa


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>
Lupa


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>
Lupa


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/.


© medianauka.pl, 2016-12-25, ART-3351






Inne zagadnienia z tej lekcji




Polecamy koszyk



© Media Nauka 2008-2017 r.