Delsträngar är sekventiella tecken inom en sträng. Exempelvis har strängen
"abc"
följande delsträngar:
""
,
"a"
,
"ab"
,
"abc"
,
"b"
,
"bc"
,
"c"
. Du kan använda metoder i ActionScript för att söka efter delsträngar i en sträng.
Mönster definieras med strängar eller reguljära uttryck i ActionScript. I följande reguljära uttryck definieras t.ex. ett specifikt mönster; bokstäverna A, B och C följt av ett digitalt tecken (snedstreck är avgränsare i reguljära uttryck):
/ABC\d/
I ActionScript finns metoder för att söka efter mönster i strängar och ersätta träffarna med delsträngar. Dessa metoder beskrivs i följande avsnitt.
Med hjälp av reguljära uttryck kan du definiera komplicerade mönster. Mer information om publicering finns i
Använda reguljära uttryck
.
Returnera en delsträng via teckenposition
Metoderna
substr()
och
substring()
används på liknande sätt. Båda returnerar en delsträng av en sträng. Båda används med två parametrar. I båda metoderna anger den första parametern startpositionen i strängen. Däremot anger den andra parametern i
substr()
-metoden
längden
på delsträngen som ska returneras och i
substring()
-metoden anger den andra parametern positionen för delsträngens
slut
-tecken (vilket inte ingår i den returnerade strängen). I detta exempel visas skillnaden mellan de båda metoderna:
var str:String = "Hello from Paris, Texas!!!";
trace(str.substr(11,15)); // output: Paris, Texas!!!
trace(str.substring(11,15)); // output: Pari
Metoden
slice()
fungerar på liknande sätt som metoden
substring()
. Om två positiva heltal anges som parametrar fungerar det på exakt samma sätt. Metoden
slice()
kan däremot användas med negativa heltal som parametrar och då tas teckenpositionen från strängens slut:
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
Du kan kombinera icke-negativa och negativa heltal som parametrar i metoden
slice()
.
Returnera teckenpositionen för en matchande delsträng
Du kan använda metoderna
indexOf()
och
lastIndexOf()
för att söka efter matchande delsträngar inom en sträng, enligt följande exempel:
var str:String = "The moon, the stars, the sea, the land";
trace(str.indexOf("the")); // output: 10
Observera, att metoden
indexOf()
är skiftlägeskänslig.
Du kan ange en andra parameter som anger på vilken indexposition i strängen sökningen ska börja:
var str:String = "The moon, the stars, the sea, the land"
trace(str.indexOf("the", 11)); // output: 21
Metoden
lastIndexOf()
söker efter den sista instansen av en delsträng i strängen:
var str:String = "The moon, the stars, the sea, the land"
trace(str.lastIndexOf("the")); // output: 30
Om du inkluderar en andra parameter med metoden
lastIndexOf()
utförs sökningen från den indexpositionen i strängen och bakåt (höger till vänster):
var str:String = "The moon, the stars, the sea, the land"
trace(str.lastIndexOf("the", 29)); // output: 21
Skapa en array med delsträngar segmenterad via avgränsare
Du kan använda metoden
split()
för att skapa en array med delsträngar, vilken delas upp baserat på ett avgränsningstecken. Du kan t.ex. segmentera en komma- eller tabbavgränsad sträng i flera strängar.
I följande exempel delas en array upp i delsträngar med et-tecknet (&) som avgränsare:
var queryStr:String = "first=joe&last=cheng&title=manager&StartDate=3/6/65";
var params:Array = queryStr.split("&", 2); // params == ["first=joe","last=cheng"]
Med den andra, valfria, parametern i metoden
split()
definieras arrayens maximala storlek som returneras.
Du kan även använda ett reguljärt uttryck som avgränsningstecken.
var str:String = "Give me\t5."
var a:Array = str.split(/\s+/); // a == ["Give","me","5."]
Läs mer i
Använda reguljära uttryck
och
Referenshandbok för ActionScript 3.0 i Adobe Flash-plattformen
.
Returnera mönster i strängar och ersätta delsträngar
I klassen String ingår följande metoder för arbetet med mönster i strängar:
-
Använd metoderna
match()
och
search()
för att söka efter delsträngar som matchar ett mönster.
-
Använd metoden
replace()
för att söka efter delsträngar som matchar ett mönster och ersätta dem med en angiven delsträng.
Dessa metoder beskrivs i följande avsnitt.
Du kan använda strängar eller reguljära uttryck för att definiera mönster som används i dessa metoder. Mer information om reguljära uttryck finns i
Använda reguljära uttryck
.
Returnera matchande delsträngar
Metoden
search()
returnerar indexpositionen för den första delsträngen som matchar ett givet mönster, enligt följande exempel:
var str:String = "The more the merrier.";
// (This search is case-sensitive.)
trace(str.search("the")); // output: 9
Du kan även använda reguljära uttryck för att definiera mönstret:
var pattern:RegExp = /the/i;
var str:String = "The more the merrier.";
trace(str.search(pattern)); // 0
Utdata för metoden
trace()
är 0, eftersom det första tecknet i strängen är indexpositionen 0. Genom att flaggan
i
anges i det reguljära uttrycket är sökningen inte skiftlägeskänslig.
Metoden
search()
hittar endast en matchning och returnerar motsvarande startindexposition, även om den globala flaggan
g
anges i det reguljära uttrycket.
I följande exempel visas ett mer komplicerat reguljärt uttryck som matchar en sträng inom citattecken:
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.)
Metoden
match()
fungerar på liknande sätt. Den söker efter en matchande delsträng. När du däremot använder den globala flaggan i ett mönster med reguljärt uttryck så returnerar
match()
en array med matchande delsträngar, enligt följande:
var str:String = "bob@example.com, omar@example.org";
var pattern:RegExp = /\w*@\w*\.[org|com]+/g;
var results:Array = str.match(pattern);
Arrayen
results
anges enligt följande:
["bob@example.com","omar@example.org"]
Mer information om reguljära uttryck finns i
Använda reguljära uttryck
.
Ersätta matchade delsträngar
Du kan använda metoden
replace()
för att söka efter ett specifikt mönster i en sträng och ersätta matchningar med angiven sträng, enligt följande exempel:
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.
Observera, att i exemplet är de matchade strängarna inte skiftlägeskänsliga eftersom flaggan
i
(
ignoreCase
) anges i det reguljära uttrycket. Flera matchningar ersätts därför att flaggan
g
(
global
) anges. Mer information om publicering finns i
Använda reguljära uttryck
.
Du kan inkludera följande
$
-ersättningskoder i ersättningssträngen. Ersättningstexten som visas i följande tabell infogas när ersättningskoden
$
påträffas.
$-kod
|
Ersättningstext
|
$$
|
$
|
$&
|
Den matchande delsträngen.
|
$`
|
Den del av strängen som föregår den matchande delsträngen. I den här koden används rakt vänsterapostroftecken (
`
), inte rakt apostroftecken (
'
) eller vänster typografiskt apostroftecken (
'
).
|
$'
|
Den del av strängen som följer den matchande delsträngen. I den här koden används rakt apostroftecken (
'
).
|
$
n
|
Den
n
:te hämtade parentetiska gruppmatchningen där n är ett ensiffrigt tal (1-9) och $n inte följs av en decimalsiffra.
|
$
nn
|
Den
nn
:te hämtade parentetiska gruppmatchningen där
nn
är ett tvåsiffrigt decimaltal, 01-99. Om det
nn
:te hämtade är odefinierat är ersättningstexten en tom sträng.
|
I följande exempel visas användningen av ersättningskoderna
$2
och
$1
som representerar den första och andra hämtade gruppen som matchar varandra:
var str:String = "flip-flop";
var pattern:RegExp = /(\w+)-(\w+)/g;
trace(str.replace(pattern, "$2-$1")); // flop-flip
Du kan även använda en funktion som den andra parametern i metoden
replace()
. Den matchande texten ersätts med funktionens returnerade värde.
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;
}
Om du använder en funktion som den andra parametern för metoden
replace()
så skickas följande argument till funktionen:
-
Den matchande delen av strängen.
-
Eventuella hämtade parentetiska gruppmatchningar. Hur många argument som skickas på det här sättet beror på antalet parentetiska matchningar. Du kan bestämma antalet parentetiska matchningar genom att kontrollera
arguments.length - 3
i funktionskoden.
-
Indexpositionen i strängen där matchningen börjar.
-
Den fullständiga strängen.
|
|
|