Returnera delsträngar och mönster i strängar

Flash Player 9 och senare, Adobe AIR 1.0 och senare

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.