Flash CS3 文件 |
|||
| ActionScript 3.0 程式設計 > 使用字串 > 尋找字串中的子字串和樣式 | |||
子字串是字串內的連續字元。例如,字串 "abc" 有下列子字串:""、"a"、"ab"、"abc"、"b"、"bc"、"c"。您可以使用 ActionScript 方法找出字串的子字串。
樣式在 ActionScript 中是由字串或規則運算式所定義的。例如,下列規則運算式會定義特定樣式,即字母 A、B 和 C,後面接著一個數字字元 (正斜線是規則運算式的分隔符號):
/ABC\d/
ActionScript 提供方法來尋找字串中的樣式,以及用取代子字串來取代找到的符合項目。下列幾節會說明這些方法。
規則運算式可定義複雜樣式。如需詳細資訊,請參閱使用規則運算式。
substr() 和 substring() 方法很相似。這兩個方法都會傳回字串的子字串,而且都會使用兩個參數。在這兩種方法中,第一個參數都是給定的字串中開頭字元的位置。但是,substr() 方法的第二個參數是要傳回子字串的「長度」,而substring() 方法的第二個參數則是子字串「結尾」字元的位置 (傳回的字串不含在此位置的字元)。本範例展示這兩種方法的差異:
var str:String = "Hello from Paris, Texas!!!";
trace(str.substr(11,15)); // 輸出:Paris, Texas!!!
trace(str.substring(11,15)); // 輸出:Pari
slice() 方法的作用類似於 substring() 方法。指定兩個非負數的整數當成參數時,結果是相同的。但是,slice() 方法可以使用負值整數做為參數,在這種情況下,字元位置會從字串結尾算起,如下列範例所示:
var str:String = "Hello from Paris, Texas!!!";
trace(str.slice(11,15)); // 輸出:Pari
trace(str.slice(-3,-1)); // 輸出:!!
trace(str.slice(-3,26)); // 輸出:!!!
trace(str.slice(-3,str.length)); // 輸出:!!!
trace(str.slice(-8,-3)); // 輸出:Texas
您可以結合非負值和負值整數,當成 slice() 方法的參數。
您可以使用 indexOf() 和 lastIndexOf() 方法,找出字串內相符的子字串,如下列範例所示:
var str:String = "The moon, the stars, the sea, the land";
trace(str.indexOf("the")); // 輸出:10
請注意,indexOf() 方法區分大小寫。
您可以指定第二個參數,指出要在字串中開始搜尋的索引位置,如下所示:
var str:String = "The moon, the stars, the sea, the land"
trace(str.indexOf("the", 11)); // 輸出:21
lastIndexOf() 方法會找出子字串在字串中最後出現的位置:
var str:String = "The moon, the stars, the sea, the land"
trace(str.lastIndexOf("the")); // 輸出:30
如果您指定 lastIndexOf() 方法的第二個參數,即會從該索引位置以回溯方式搜尋字串 (從右到左):
var str:String = "The moon, the stars, the sea, the land"
trace(str.lastIndexOf("the", 29)); // 輸出:21
您可以使用 split() 方法,依照分隔符號來拆解字串,據以建立子字串陣列。例如,您可以將以逗點分隔和定位點分隔的字串,區分為數個字串。
下列範例顯示如何使用連字號 (&) 字元當成分隔符號,將陣列拆解為子字串:
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() 方法的第二個參數是選擇性的,會定義所傳回陣列的大小上限。
您也可以使用規則運算式當做分隔符號字元:
var str:String = "Give me\t5." var a:Array = str.split(/\s+/); // a == ["Give","me","5."]
如需詳細資訊,請參閱使用規則運算式和「ActionScript 3.0 語言和組件參考」。
String 類別包含下列方法,可處理字串中的樣式:
match() 和 search() 方法可以找出符合樣式的子字串。replace() 方法可以尋找符合樣式的子字串,然後使用指定的子字串取代這些子字串。下列幾節會說明這些方法。
您可以使用字串或規則運算式定義這些方法所用的樣式。如需有關規則運算式的詳細資訊,請參閱使用規則運算式。
search() 方法會傳回符合特定樣式的第一個子字串的索引位置,如下列範例所示:
var str:String = "The more the merrier.";
// (此搜尋區分大小寫)
trace(str.search("the")); // 輸出:9
您也可以使用規則運算式定義比對的樣式,如下列範例所示:
var pattern:RegExp = /the/i; var str:String = "The more the merrier."; trace(str.search(pattern)); // 0
trace() 方法的輸出為 0,因為字串中第一個字元的索引位置為 0。規則運算式中設定了 i 旗標,因此搜尋不區分大小寫。
search() 方法只找到一個符合的項目,並傳回其開頭索引位置,即使規則運算式設定了 g (全域) 旗標。
下列範例顯示一個更複雜的規則運算式,這個規則運算式會比對雙引號中的字串:
var pattern:RegExp = /"[^"]*"/; var str:String = "The \"more\" the merrier."; trace(str.search(pattern)); // 輸出:4 str = "The \"more the merrier."; trace(str.search(pattern)); // 輸出:-1 // (表示沒有符合的項目,因為沒有右雙引號)。
match() 方法有類似的運作方式,也會搜尋相符的子字串。但是,當您在規則運算式樣式中使用全域旗標時 (如下列範例所示),match() 會傳回符合子字串的陣列:
var str:String = "bob@example.com, omar@example.org"; var pattern:RegExp = /\w*@\w*\.[org|com]+/g; var results:Array = str.match(pattern);
results 陣列會設定如下:
["bob@example.com","omar@example.org"]
如需有關規則運算式的詳細資訊,請參閱使用規則運算式。
您可以使用 replace() 方法在字串中搜尋指定的樣式,然後使用指定的取代字串來取代符合的項目,如下列範例所示:
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.
請注意,在這個範例中,符合的字串不區分大小寫,因為規則運算式中設定了 i (忽略大小寫) 旗標,此外也取代多個符合的項目,這則是因為設定了 g (全域) 旗標。如需詳細資訊,請參閱使用規則運算式。
您可以在取代字串中加入下列 $ 取代程式碼。下表顯示的取代文字會插入來代替 $ 取代程式碼:
|
$ 程式碼 |
取代文字 |
|---|---|
|
|
$ |
|
|
符合的子字串。 |
|
|
符合之子字串前面的字串部分。此程式碼會使用半形左單引號字元 ( |
|
|
符合之子字串後面的字串部分。此程式碼會使用半形單引號 ( |
|
|
第 n 個擷取到的額外符合群組,其中 n 是 1 到 9 的單一位數,而且 $n 的後面沒有小數位數。 |
|
|
第 nn 個擷取到的額外符合群組,其中 nn 是 01 到 99 的兩位數。如果未定義第 nn 個擷取,取代文字會是空字串。 |
例如,以下會說明 $2 與 $1 取代程式碼的用法,這些程式碼代表擷取到的第一個與第二個符合群組:
var str:String = "flip-flop"; var pattern:RegExp = /(\w+)-(\w+)/g; trace(str.replace(pattern, "$2-$1")); // flop-flip
您也可以使用函數當做 replace() 方法的第二個參數。符合的文字會由函數的傳回值取代。
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 = usd * exchangeRate; const euroSymbol:String = String.fromCharCode(8364); return euro.toFixed(2) + " " + euroSymbol; }
當您使用函數做為 replace() 方法的第二個參數時,下列引數會傳遞至函數:
arguments.length - 3,判斷額外符合項目數。Flash CS3
目前頁面: http://livedocs.adobe.com/flash/9.0_tw/main/00000084.html