Znajdowanie podciągów i wzorców w ciągach znakówFlash Player 9 i nowsze wersje, Adobe AIR 1.0 i nowsze wersje Podciągi do fragmenty ciągów znaków złożone z sąsiadujących ze sobą znaków. Na przykład ciąg znaków "abc" zawiera następujące podciągi: "", "a", "ab", "abc", "b", "bc", "c". W języku ActionScript dostępne są metody służące do wyszukiwania podciągów w ciągu znaków. Wzorce w języku ActionScript definiuje się w postaci ciągów znaków lub wyrażeń regularnych. Na przykład poniższe wyrażenie regularne definiuje konkretny wzorzec — litery A, B i C, po których następuje cyfra (ukośniki pełnią rolę ograniczników wyrażeń regularnych): /ABC\d/ Język ActionScript oferuje metody do znajdowania wzorców w ciągach znaków i do zastępowania znalezionych fragmentów określonymi podciągami. Metody te zostały opisane w następnych sekcjach. Wyrażenia regularne umożliwiają definiowanie skomplikowanych wzorców. Więcej informacji zawiera rozdział Korzystanie z wyrażeń regularnych. Znajdowanie podciągu na podstawie pozycji znakuMetody substr() i substring() działają w podobny sposób. Obie zwracają podciąg z ciągu znaków. Obie mają po dwa parametry. W obu metodach pierwszy parametr określa pozycję pierwszego znaku podciągu w danym ciągu znaków. Jednak w metodzie substr() drugi parametr jest długością podciągu, jaki ma być zwrócony, a w metodzie substring() drugi parametr to pozycja znaku znajdującego się za końcem podciągu (ten znak nie jest zwracany w podciągu). Poniższy przykład ilustruje różnicę między tymi dwiema metodami: var str:String = "Hello from Paris, Texas!!!"; trace(str.substr(11,15)); // output: Paris, Texas!!! trace(str.substring(11,15)); // output: Pari Metoda slice() działa podobnie, jak metoda substring(). Gdy jej parametry są nieujemnymi liczbami całkowitymi, działa dokładnie tak samo. Jednak parametrami metody slice() mogą być także ujemne liczby całkowite, i wówczas pozycje znakowe są liczone od końca ciągu znaków, tak jak w poniższym przykładzie: var str:String = "Hello from Paris, Texas!!!"; trace(str.slice(11,15)); // output: Pari trace(str.slice(-3,-1)); // output: !! trace(str.slice(-3,26)); // output: !!! trace(str.slice(-3,str.length)); // output: !!! trace(str.slice(-8,-3)); // output: Texas W jednym wywołaniu metody slice() można podać zarówno parametry nieujemne, jak i ujemne. Znajdowanie pozycji znakowa dopasowanego podciąguMetody indexOf() i lastIndexOf() służą do znajdowania dopasowanych podciągów wewnątrz ciągu znaku, co ilustruje poniższy przykład: var str:String = "The moon, the stars, the sea, the land";
trace(str.indexOf("the")); // output: 10
Należy zwrócić uwagę, że metoda indexOf() rozróżnia wielkość liter. Można określić drugi parametr oznaczający indeks, od którego należy rozpocząć poszukiwanie podciągu: var str:String = "The moon, the stars, the sea, the land"
trace(str.indexOf("the", 11)); // output: 21
Metoda lastIndexOf() znajduje ostatnie wystąpienie podciągu wewnątrz ciągu znaków: var str:String = "The moon, the stars, the sea, the land"
trace(str.lastIndexOf("the")); // output: 30
Jeśli w wywołaniu metody lastIndexOf() zostanie podany drugi parametr, poszukiwanie podciągu rozpocznie się od wskazanego indeksu i będzie postępować w kierunku początku ciągu (od prawej do lewej strony): var str:String = "The moon, the stars, the sea, the land"
trace(str.lastIndexOf("the", 29)); // output: 21
Tworzenie tablicy z podciągów rozdzielonych ogranicznikamiMetoda split() umożliwia utworzenie tablicy złożonej z podciągów wyodrębnionych na podstawie rozmieszczenia ograniczników w ciągu znaków. W ten sposób można na przykład podzielić na wiele podciągów jeden ciąg znaków zawierający dane rozdzielone przecinkami lub znakami tabulacji. Poniższy przykład ilustruje rozbicie ciągu na tablicę podciągów, przy czym znakiem ogranicznika jest w tym przypadku ampersand (&): var queryStr:String = "first=joe&last=cheng&title=manager&StartDate=3/6/65";
var params:Array = queryStr.split("&", 2); // params == ["first=joe","last=cheng"]
Drugi, opcjonalny, parametr metody split(), określa maksymalny rozmiar zwracanej tablicy. W charakterze ogranicznika można też użyć wyrażenia regularnego: var str:String = "Give me\t5." var a:Array = str.split(/\s+/); // a == ["Give","me","5."] Więcej informacji zawiera sekcja Korzystanie z wyrażeń regularnych oraz Skorowidz języka ActionScript 3.0 dla platformy Adobe Flash. Znajdowanie wzorców w ciągach znaków i zastępowanie ciągów cząstkowychKlasa String udostępnia następujące metody służące do operowania na wzorcach w ciągach znaków:
Metody te zostały opisane w następnych sekcjach. Wzorce używane w opisywanych metodach mogą mieć postać ciągów znaków lub wyrażeń regularnych. Więcej informacji na temat wyrażeń regularnych zawiera sekcja Korzystanie z wyrażeń regularnych. Znajdowanie dopasowanych podciągówMetoda search() zwraca indeks pierwszego podciągu zgodnego ze wzorcem, co ilustruje poniższy przykład: var str:String = "The more the merrier.";
// (This search is case-sensitive.)
trace(str.search("the")); // output: 9
Poszukiwany wzorzec może być wyrażeniem regularnym, tak jak w poniższym przykładzie: var pattern:RegExp = /the/i; var str:String = "The more the merrier."; trace(str.search(pattern)); // 0 Wynikiem wywołania metody trace() jest 0, ponieważ pierwszy znak w ciągu ma indeks 0. Wyrażenie regularne zawiera ustawioną flagę i, która powoduje, że przy wyszukiwaniu nie jest uwzględniana wielkość liter. Metoda search() znajduje tylko jeden dopasowany podciąg i zwraca indeks jego pierwszego znaku, nawet jeśli wyrażenie regularne zawiera ustawioną flagę g (global). W poniższym przykładzie użyto bardziej skomplikowanego wyrażenia regularnego, które znajduje ciąg znaków ujęty w cudzysłów: var pattern:RegExp = /"[^"]*"/; var str:String = "The \"more\" the merrier."; trace(str.search(pattern)); // output: 4 str = "The \"more the merrier."; trace(str.search(pattern)); // output: -1 // (Indicates no match, since there is no closing double quotation mark.) Metoda match() działa podobnie. Wyszukuje zgodny podciąg. Jednak użycie flagi globalne w wyrażeniu regularnym — tak jak w poniższym przykładzie — spowoduje, że metoda match() zwróci tablicę zawierającą znalezione podciągi: var str:String = "bob@example.com, omar@example.org"; var pattern:RegExp = /\w*@\w*\.[org|com]+/g; var results:Array = str.match(pattern); Tablicy results przypisywana jest następująca wartość ["bob@example.com","omar@example.org"] Więcej informacji na temat wyrażeń regularnych zawiera sekcja Korzystanie z wyrażeń regularnych. Zastępowanie znalezionych podciągówMetoda replace() umożliwia wyszukanie w ciągu znaków określonego wzorca i zastąpienie znalezionych podciągów określonym ciągiem zastępczym, co ilustruje poniższy przykład: var str:String = "She sells seashells by the seashore."; var pattern:RegExp = /sh/gi; trace(str.replace(pattern, "sch")); //sche sells seaschells by the seaschore. Należy zwrócić uwagę, że w tym przykładzie przy wyszukiwaniu podciągów nie jest rozróżniana wielkość liter, ponieważ wyrażenie regularne zawiera ustawioną flagę i (ignoreCase), a ponadto zastępowanych jest wiele znalezionych podciągów, ponieważ ustawiona jest flaga g (global). Więcej informacji zawiera rozdział Korzystanie z wyrażeń regularnych. W zastępczym ciągu znaków można umieścić kody zastępcze ($). Teks zastępczy podany w poniższej tabeli zostanie wstawiony w miejsce kodu zastępczego $:
Poniższy przykład ilustruje zastosowanie kodów zastępczych $2 i $1 reprezentujących pierwszą i drugą zgodną przechwyconą grupę: var str:String = "flip-flop"; var pattern:RegExp = /(\w+)-(\w+)/g; trace(str.replace(pattern, "$2-$1")); // flop-flip W charakterze drugiego parametru metody replace() można też użyć funkcji. Znaleziony tekst zostanie zastąpiony wartością zwróconą przez funkcję. var str:String = "Now only $9.95!";
var price:RegExp = /\$([\d,]+.\d+)+/i;
trace(str.replace(price, usdToEuro));
function usdToEuro(matchedSubstring:String, capturedMatch1:String, index:int, str:String):String
{
var usd:String = capturedMatch1;
usd = usd.replace(",", "");
var exchangeRate:Number = 0.853690;
var euro:Number = parseFloat(usd) * exchangeRate;
const euroSymbol:String = String.fromCharCode(8364);
return euro.toFixed(2) + " " + euroSymbol;
}
Gdy jako drugi argument w wywołaniu metody replace() zostanie użyta funkcja, do funkcji przekazywane są następujące argumenty:
|
|