Dizelerdeki alt dizeleri ve desenleri bulma

Flash Player 9 ve üstü, Adobe AIR 1.0 ve üstü

Alt dizeler, bir dize içindeki sıralı karakterlerdir. Örneğin, "abc" dizesi şu alt dizelere sahiptir: "", "a", "ab", "abc", "b", "bc", "c". Bir dizenin alt dizelerini bulmak için ActionScript yöntemlerini kullanabilirsiniz.

Desenler, ActionScript'te dizelerle veya normal ifadelerle tanımlanır. Örneğin, şu normal ifade belirli bir deseni tanımlar—ardından bir rakam karakterinin geldiği A, B ve C harfleri (normal ifade sınırlayıcıları, eğik çizgilerdir):

/ABC\d/

ActionScript, dizelerdeki desenlerin bulunmasına ve bulunan eşleşmelerin yerini alan alt dizelerlerle değiştirilmesine yönelik yöntemler içerir. Bunlar ilerleyen bölümlerde açıklanmaktadır.

Normal ifadeler karmaşık desenleri tanımlayabilir. Daha fazla bilgi için, bkz. Normal ifadeler kullanma.

Karakter konumuna göre bir alt dizeyi bulma

substr() ve substring() yöntemleri birbirine benzer. Her ikisi de bir dizenin alt dizesini döndürür. Her ikisi de iki parametre alır. Her iki yöntemde de birinci parametre, belirli bir dizedeki başlangıç karakterinin konumudur. Ancak, substr() yönteminde ikinci parametre, döndürülecek alt dizenin uzunluğuyken, substring() yönteminde ikinci parametre, alt dizenin sonundaki karakterin (döndürülen dizeye dahil edilmeyen) konumudur. Bu örnek, bu iki yöntem arasındaki farkı gösterir:

var str:String = "Hello from Paris, Texas!!!"; 
trace(str.substr(11,15)); // output: Paris, Texas!!! 
trace(str.substring(11,15)); // output: Pari

slice() yöntemi, substring() yöntemine benzer şekilde çalışır. Parametre olarak iki tane negatif olmayan tam sayı verildiğinde tamamen aynı çalışır. Ancak, slice() yöntemi negatif tam sayıları parametre olarak alabilir ve bu durumda aşağıdaki örnekte gösterildiği gibi, karakter konumu dizenin sonundan alınır:

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

slice() yönteminin parametreleri olarak negatif olmayan tam sayılarla negatif tam sayıları birleştirebilirsiniz.

Eşleşen bir alt dizenin karakter konumunu bulma

Aşağıdaki örnekte gösterildiği gibi, bir dizedeki eşleşen alt dizeleri bulmak için indexOf() ve lastIndexOf() yöntemlerini kullanabilirsiniz:

var str:String = "The moon, the stars, the sea, the land"; 
trace(str.indexOf("the")); // output: 10

indexOf() yönteminin büyük/küçük harf duyarlı olduğuna dikkat edin.

Aşağıdaki gibi, aramanın başlatılacağı dizedeki dizin konumunu belirtmek için ikinci bir parametre belirtebilirsiniz:

var str:String = "The moon, the stars, the sea, the land" 
trace(str.indexOf("the", 11)); // output: 21

lastIndexOf() yöntemi, dizedeki alt dizenin en son geçtiği yeri bulur:

var str:String = "The moon, the stars, the sea, the land" 
trace(str.lastIndexOf("the")); // output: 30

lastIndexOf() yöntemine ikinci bir parametre dahil ederseniz, arama geriye doğru çalışacak şekilde (sağdan sola) dizedeki dizin konumundan yürütülür:

var str:String = "The moon, the stars, the sea, the land" 
trace(str.lastIndexOf("the", 29)); // output: 21

Alt dizelerin sınırlayıcıyla bölünmüş bir dizisini oluşturma

Alt dizelerin sınırlayıcı esas alınarak bölünmüş bir dizisini oluşturmak için split() yöntemini kullanabilirsiniz. Örneğin, virgül sınırlı veya sekme sınırlı dizeyi birden çok dizeye bölebilirsiniz.

Aşağıdaki örnekte, sınırlayıcı olarak ve (&) karakterinin kullanılmasıyla bir dizinin nasıl alt dizelere bölündüğü gösterilmektedir:

var queryStr:String = "first=joe&last=cheng&title=manager&StartDate=3/6/65"; 
var params:Array = queryStr.split("&", 2); // params == ["first=joe","last=cheng"]

split() yönteminin isteğe bağlı olan ikinci parametresi, döndürülen dizinin maksimum boyutunu tanımlar.

Normal bir ifadeyi de sınırlayıcı olarak kullanabilirsiniz:

var str:String = "Give me\t5." 
var a:Array = str.split(/\s+/); // a == ["Give","me","5."]

Daha fazla bilgi için bkz. Normal ifadeler kullanma ve Adobe Flash Platformu için ActionScript 3.0 Başvurusu.

Dizelerdeki desenleri bulma ve alt dizeleri değiştirme

String sınıfı, dizelerdeki desenlerle çalışılmasına yönelik şu yöntemleri içerir:

  • Bir desenle eşleşen alt dizeleri bulmak için match() ve search() yöntemlerini kullanın.

  • Bir desenle eşleşen alt dizeleri bulup bunları belirtilen bir alt dizeyle değiştirmek için replace() yöntemini kullanın.

Bunlar ilerleyen bölümlerde açıklanmaktadır.

Bu yöntemlerde kullanılan desenleri tanımlamak için dizeleri veya normal ifadeleri kullanabilirsiniz. Normal ifadeler hakkında daha fazla bilgi için, bkz. Normal ifadeler kullanma.

Eşleşen alt dizeleri bulma

search() yöntemi, bu örnekte gösterildiği gibi, belirli bir desenle eşleşen birinci alt dizenin dizin konumunu döndürür:

var str:String = "The more the merrier."; 
// (This search is case-sensitive.) 
trace(str.search("the")); // output: 9 

Bu örnekte gösterildiği gibi, eşleşen deseni tanımlamak için normal ifadeleri kullanabilirsiniz:

var pattern:RegExp = /the/i; 
var str:String = "The more the merrier."; 
trace(str.search(pattern)); // 0

Dizedeki birinci karakter 0 dizin konumunda olduğundan, trace() yönteminin çıktısı 0'dır. i bayrağı normal ifadede ayarlanır, bu nedenle arama büyük/küçük harf duyarlı değildir.

Normal ifadede g (genel) bayrağı ayarlanmış olsa da, search() yöntemi yalnızca bir eşleşme bulur ve bunun başlangıç dizin konumunu döndürür.

Aşağıdaki örnek, tırnak işareti içindeki bir dizeyle eşleşen, daha karmaşık bir normal ifadeyi gösterir:

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.)

match() yöntemi benzer şekilde çalışır. Eşleşen bir alt dizeyi arar. Ancak, aşağıdaki örnekte olduğu gibi, normal ifade deseninde genel bayrağını kullandığınızda, match() yöntemi, eşleşen alt dizelerin bir dizisini döndürür:

var str:String = "bob@example.com, omar@example.org"; 
var pattern:RegExp = /\w*@\w*\.[org|com]+/g; 
var results:Array = str.match(pattern);

results dizisi şu şekilde ayarlanır:

["bob@example.com","omar@example.org"]

Normal ifadeler hakkında daha fazla bilgi için, bkz. Normal ifadeler kullanma.

Eşleşen alt dizeleri değiştirme

Bir dizedeki belirtilen bir deseni aramak ve eşleşmeleri, belirtilen yerini alan dizeyle değiştirmek için, aşağıdaki örnekte gösterildiği gibi, replace() yöntemini kullanabilirsiniz:

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. 

Normal ifadede i (ignoreCase) bayrağı ayarlanmış olduğundan, eşleşen dizelerin büyük/küçük harf duyarlı olmadığını ve g (global) bayrağı ayarlanmış olduğundan, birden çok eşleşmenin değiştirildiğini unutmayın. Daha fazla bilgi için, bkz. Normal ifadeler kullanma.

Yerini alan dizeye şu $ yerini alma kodlarınıdahil edebilirsiniz. Aşağıdaki tabloda gösterilen yerini alan metin, $ yerini alma kodunun yerine eklenir:

$ Kodu

Yerini Alan Metin

$$

$

$&

Eşlenen alt dize.

$`

Eşleşen alt dizeden önce gelen dize bölümü. Bu kod, düz kesme işaretini (') veya sola eğik kesme işaretini (') değil, düz sola eğik kesme işareti karakterini (`) kullanır.

$'

Eşleşen alt dizeden sonra gelen dize bölümü. Bu kod, düz kesme işaretini (') kullanır.

$n

n. yakalanan parantez grubu eşleşmesi, burada n 1-9 arasında tek basamaklı bir sayıdır ve $n öğesinden sonra ondalık bir sayı gelmez.

$nn

nn. yakalanan parantez grubu eşleşmesi, burada nn 01–99 arasında iki basamaklı ondalık bir sayıdır. nn. yakalama tanımsızsa, yerini alan metin boş bir dizedir.

Örneğin, aşağıda, eşleşen birinci ve ikinci yakalama grubunu temsil eden$2 ve $1 yerini alma kodlarının kullanımını göstermektedir:

var str:String = "flip-flop"; 
var pattern:RegExp = /(\w+)-(\w+)/g; 
trace(str.replace(pattern, "$2-$1")); // flop-flip

Bir işlevi replace() yönteminin ikinci parametresi olarak da kullanabilirsiniz. Eşleşen metin, işlevin döndürülen değeriyle değiştirilir.

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; 
}

Bir işlevi, replace() yönteminin ikinci parametresi olarak kullandığınızda, şu argümanlar işleve iletilir:

  • Dizenin eşleşen bölümü.

  • Herhangi bir yakalama parantez grubu eşleşmesi. Bu şekilde iletilen argüman sayısı, parantez eşleşmelerinin sayısına bağlı olarak değişiklik gösterir. İşlev kodu içinde arguments.length - 3 öğesini kontrol ederek, parantez eşleşmelerinin sayısını belirleyebilirsiniz.

  • Eşlemenin başladığı dize içindeki dizin konumu.

  • Tam dize.