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 znaku
Metody
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ągu
Metody
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 ogranicznikami
Metoda
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ąstkowych
Klasa 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ów
Metoda
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ów
Metoda
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
$
:
Kod $
|
Tekst zastępczy
|
$$
|
$
|
$&
|
Znaleziony podciąg.
|
$`
|
Fragment ciągu poprzedzający znaleziony podciąg. Ten kod zawiera lewy pojedynczy prosty cudzysłów (
`
), a nie prosty apostrof (
'
) ani nie lewy pojedynczy zaokrąglony cudzysłów (
'
).
|
$'
|
Fragment ciągu następujący poi znalezionym podciągu. Ten kod zawiera prawy pojedynczy prosty cudzysłów (
'
).
|
$
n
|
Zgodna przechwycona
n
-ta grupa ujęta w nawias, gdzie wartość n to pojedyncza cyfra z zakresu 1-9, a po $n nie następuje liczba dziesiętna.
|
$
nn
|
Zgodna przechwycona
nn
-ta grupa ujęta w nawias, gdzie wartość
nn
to dwucyfrowa liczba dziesiętna (01-99. Jeśli
nn
-ta wartość przechwycenia jest niezdefiniowana, tekst zastępczy stanowi pusty ciąg.
|
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:
-
Zgodny fragment ciągu.
-
Zgodne grupy przechwycone ujęte w nawias. Liczba przekazanych w ten sposób argumentów będzie się różnić w zależności od liczby zgodnych grup ujętych w nawias. Można określić liczbę zgodnych grup ujętych w nawias sprawdzając wartość
arguments.length - 3
w kodzie funkcji.
-
Położenie indeksu w miejscu rozpoczęcia dopasowania w ciągu znaków.
-
Kompletny ciąg znaków.
|
|
|