Witaj, Gościu O nas | Kontakt | Mapa
Wortal Forum PHPEdia.pl Planeta Kubek IRC Przetestuj się!

Zrozumieć obiekt RegExp w JavaScript

Jedna Mississippi, Dwie Mississippi...

Następna metoda obiektu RegExp to exec(). Jej działanie jest podobne do działania metody match() obiektu String. Popatrzmy:

<script language="JavaScript"> 
  
// definicja łańcucha tekstowego
var place = "Mississippi"; 
  
// wzorzec
var obj = /is./; 
  
// szukanie dopasowań
// wynik umieszczamy w tablicy
result = obj.exec(place); 
  
// wyświetlamy wynik
if(result != null) { 
 alert("Found " + result[0] + " at " + result.index); 
} 
</script> 

Metoda exec() zwraca w wyniku tablicę łańcuchów tekstowych, które pasują do wzorca zawartego w obiekcie RegExp i odnalezionych w przeszukiwanym tekście. Możesz wykorzystać metodę index() obiektu Array, aby sprawdzić, na której pozycji został odnaleziony tekst spełniający wymagania wzorca.

Główną różnicą pomiędzy match() a exec() są ich parametry. Pierwsza działa na tekście, a jej parametrem jest wzorzec do poszukiwań. Druga działa na wyrażeniu, a jej parametrem jest tekst, który ma zostać przeszukany.

Ale to nie wszystko. Metoda exec() domyślnie przeszukuje tekst dalej po znalezieniu pierwszego zestawu znaków pasujących do wzorca. Nie ma potrzeby ustawiania modyfikatora "g". Dla lepszego zrozumienia spójrz na przykład poniżej:

<script language="JavaScript"> 
  
// definicja łańcucha tekstowego
var place = "Mississippi"; 
  
// wzorzec
var obj = /is./; 
  
// szukamy wszystkich wystąpień wzorca 
// wyświetlamy wynik
while((result = obj.exec(place)) != null) { 
 alert("Found " + result[0] + " at " + result.index); 
} 
  
</script>

A więc co tutaj mamy? Na początku, użyłem pętli "while" do wykonywania metody exec(), dopóki ta nie osiągnie końca tekstu, który miała przeszukać (wtedy to obiekt zwróci null i pętla się zakończy). To dlatego, że obiekt RegExp pamięta pozycję ostatnio znalezionego wystąpienia znaków pasujących do wzorca, a po ponownym wywołaniu tej metody poszukiwania są kontynuowane właśnie od tego miejsca.

Tak przynajmniej przedstawia się teoria. Powyższy kod nie działa tak, jak byśmy tego oczekiwali w Internet Explorerze czy Netscape Navigatorze, tak więc powinieneś uważać używając tej metody. Rozważ więc powyższy przykład jako teoretyczny... chyba, że przeglądarki naprawią ten błąd.

Następną rzeczą wartą uwagi w powyższym przykładzie jest moja definicja obiektu RegExp. Mianowicie nie użyłem tutaj konstruktora ani operatora "new", aby utworzyć ten obiekt. Po prostu zrobiłem to tak, jak gdybym definiował zwykłą zmienną. Jest to taki techniczny skrót przy tworzeniu nowych obiektów RegExp. Warto zapamiętać.

Informacje na podobny temat:
Wasze opinie
Wszystkie opinie użytkowników: (1)
zamiana nietypowych znaków
Niedziela 01 Kwiecień 2007 11:46:19 am - Fixer <piskomd_at_poczta.onet.pl>

a jak zamienić w tekście zestaw znaków typu :) lub :/ na <img src"".....?

Mentax.pl    NQ.pl- serwery z dodatkiem świętego spokoju...   
O nas | Kontakt | Mapa serwisu
Copyright (c) 2003-2020 php.pl    Wszystkie prawa zastrzeżone    Powered by eZ publish Content Management System eZ publish Content Management System