Obiekt RegExp

Składnia:

zmienna = new RegExp("wzorzec","opcja");

lub

zmienna = /wzorzec/opcja;

Obiekt RegExp służy do przechowywania wzorca znakowego, który wykorzystuje się w zaawansowanych funkcjach przeszukiwania lub podmiany łąńcuchów znakowych. Obiekt taki może być wykorzystany w niektórych metodach obiektu String, takich jak: search, match, replace lub split. Istnieje też kilka metod obiektu RegExp, gdzie zmienną String umieszcza się jako argument.

Opcja może przyjąć trzy wartości:

Przykład:

var str = "Tramwaj stoi na przystanku tramwajowym";
var re = /tramwaj/gi;
var a = str.replace(re, "autobus");
/* a równe "autobus stoi na przystanku autobusowym"

gdyby opcją było "i" to a byłoby równe "autobus stoi na przystanku tramwajowym", ponieważ brak przeszukiwania globalnego spowodowałby podmianę tylko pierwszego słowa.

gdyby opcją było "g" to a byłoby równe "Tramwaj stoi na przystanku autobusowym", ponieważ brak ignorowania wielkości liter spowodowałaby pominięcie pierwszego słowa. */

Do konstruowania wzorca można użyć specjalnych znaków lub sekwencji znaków.

. kropka oznacza dowolny znak

k.t oznacza kot, kat, kit, kąt itp.


[abc] oznacza dowolny znak znajdujący się w nawiasie kwadratowym

k[ao]ra oznacza kara lub kora ale nie kura.


[^abc] oznacza dowolny znak, którego nie ma w nawiasie kwadratowym

k[^ao]ra może oznaczać kura ale nie będzie to ani kara ani kora.


[a-z] oznacza dowolny znak znajdujący się w podanym zakresie

z1[a-c] oznacza z1a lub z1b lub z1c.


[^a-z] oznacza dowolny znak, którego nie ma w podanym zakresie

k[^a-p]ra może oznaczać kura ale nie będzie to ani kara ani kora.


* oznacza, że poprzedzający znak może wystąpić 0 lub więcej razy

Zo* może oznaczać Z, Zo, Zoo, Zooo itd.


oznacza, że poprzedzający znak może wystąpić 1 lub więcej razy

Zo+ może oznaczać Zo, Zoo, Zooo itd.


? oznacza, że poprzedzający znak może wystąpić 0 lub 1 raz

Zo? może oznaczać Z lub Zo i nic więcej.


{n} oznacza, że poprzedzający znak musi wystąpić n razy (n to dodatnia liczba całkowita)

Zo{2} może oznaczać tylko Zoo i nic więcej.


{n,} oznacza, że poprzedzający znak musi wystąpić co najmniej n razy (n to dodatnia liczba całkowita)

Zo{2,} może oznaczać Zoo, Zooo, Zoooo itd.


{n,m} oznacza, że poprzedzający znak musi wystąpić co najmniej n razy i co najwyżej m razy (n i m to dodatnie liczby całkowite)

Zo{1,3} może oznaczać Zo, Zoo, Zooo i nic poza tym.


\b oznacza granicę wyrazu

\bkora\b oznacza osobny wyraz kora (a nie na przykład ciąg znaków w słowie pokora).


\B oznacza miejsce nie stanowiące granicy wyrazu

\Bkora nie może oznaczać osobnego wyrazu kora (ale może oznaczać ciąg znaków "kora" w słowie "pokora").


\d oznacza dowolną cyfrę (ekwiwalent [0-9])


\D oznacza dowolny znak nie będący cyfrą (ekwiwalent [^0-9])


x|y oznacza albo x albo y

(czer|ziel)ony może oznaczać albo czerwony albo zielony.




Przykład wzorca złożonego

var re = new RegExp("</?a[^>]*>","gi");
tekst_html=tekst_html.replace(re,"");

Powyższy fragment kodu spowoduje, że w zmiennej tekst_html wszystkie odnośniki zostaną zamienione na zwykły tekst.
Spróbujmy przeanalizować wzorzec zawarty w obiekcie RegExp.

</?a[^>]*>

<  pierwszym znakiem we wzorcu musi być znak mniejszości.

/?  drugim znakiem we wzorcu może być slash, ale nie musi wystąpić.

a  kolejnym znakiem we wzorcu jest litera a.

[^>]*  następnie we wzorcu jest ciąg dowolnej ilości znaków oprócz znaku większości (może też nie być żadnego znaku).

>  ostatnim znakiem we wzorcu jest znak większości.

W wyniku działania powyższego kodu ze zmiennej tekst_html zostaną usunięte (zamienione na pusty łańcuch "") następujące fragmenty:

"<a>"
"</a>"
"<a ... dowolne parametry ... >"

przy czym wielkość liter nie będzie miała znaczenia.






Właściwości obiektu RegExp:


Metody obiektu RegExp:


Właściwości obiektu RegExp

zmiennaRegExp.source

Właściwość ta pozwala nam odczytać wzorzec jaki zawiera obiekt.


zmiennaRegExp.lastIndex

Właściwość ta pozwala nam ustalić od jakiego indeksu ma się rozpocząć przeszukiwanie.




Metody obiektu RegExp

zmiennaRegExp.exec(zmiennaString)

Metoda przeszukuje zmiennąString w poszukiwaniu łańcucha znaków pasującego do wzorca zawartego w zmiennejRegExp. Jeżeli łańcuch taki nie zostanie odnaleziony to wartością zwrotną jest null. Jeżeli zostanie odnaleziony jeden lub więcej łańcuchów pasujących do wzorca to wartością zwrotną jest tablica zawierająca te łańcuchy.
Ponieważ metoda jest nieco odmiennie realizowana w przeglądarkach różnych firm, proponuję zastąpienie ją metodą match obiektu String, która działa w podobny sposób.


zmiennaRegExp.test(zmiennaString)

Metoda przeprowadza test, czy w zmiennejString znajduje się łańcuch znakowy pasujący do wzorca określonego w obiekcie RegExp. Jeżeli tak, to wartością zwrotną jest true, jeśli nie to wartością zwrotną jest false.

Przykład:

var re = new RegExp("jpg|gif","i");
if(re.test(str))
alert("W zmiennej str jest coś na temat grafiki.");


zmiennaRegExp.compile("wzorzec","opcja")

Metoda umożliwia zdefiniowanie nowego wzorca dla obiektu RegExp. Ponadto kompiluje wzorzec do formatu, który pozwala na znacznie szybsze przeszukiwanie. Może mieć to szczególne znaczenie przy bardziej skomplikowanym, wielokrotnym przeszukiwaniu w pętli.