子字串是字串內的連續字元。例如,字串
"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)); // output: Paris, Texas!!!
trace(str.substring(11,15)); // output: Pari
slice()
方法的作用與
substring()
方法類似。指定兩個非負數的整數當成參數時,結果是相同的。但是,
slice()
方法可以使用負值整數做為參數,在這種情況下,字元位置會從字串結尾算起,如下列範例所示:
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()
方法的參數。
找出相符子字串的字元位置
您可以使用
indexOf()
和
lastIndexOf()
方法,找出字串內相符的子字串,如下列範例所示:
var str:String = "The moon, the stars, the sea, the land";
trace(str.indexOf("the")); // output: 10
請注意,
indexOf()
方法會區分大小寫。
您可以指定第二個參數,指出要在字串中開始搜尋的索引位置,如下所示:
var str:String = "The moon, the stars, the sea, the land"
trace(str.indexOf("the", 11)); // output: 21
lastIndexOf()
方法會找出子字串在字串中最後出現的位置:
var str:String = "The moon, the stars, the sea, the land"
trace(str.lastIndexOf("the")); // output: 30
如果您指定
lastIndexOf()
方法的第二個參數,會從該索引位置以回溯方式搜尋字串 (從右到左):
var str:String = "The moon, the stars, the sea, the land"
trace(str.lastIndexOf("the", 29)); // output: 21
建立由分隔符號區分的子字串陣列
您可以使用
split()
方法,依照分隔符號來拆解字串,據以建立子字串陣列。例如,您可以將以逗點分隔和定位點分隔的字串,區分為數個字串。
下列範例顯示如何使用 and 符號 (&) 字元當成分隔符號,將陣列拆解為子字串:
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."]
如需詳細資訊,請參閱
使用規則運算式
和
適用於 Adobe Flash Platform 的 ActionScript 3.0 參考
。
尋找字串中的樣式並取代子字串
String 類別包含下列方法,可處理字串中的樣式:
下列各節會說明這些方法。
您可以使用字串或規則運算式定義這些方法所用的樣式。如需有關規則運算式的詳細資訊,請參閱
使用規則運算式
。
尋找符合的子字串
search()
方法會傳回符合特定樣式的第一個子字串的索引位置,如下列範例所示:
var str:String = "The more the merrier.";
// (This search is case-sensitive.)
trace(str.search("the")); // output: 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)); // 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()
方法有類似的運作方式,也會搜尋相符的子字串。但是,當您在規則運算式樣式中使用全域旗標時 (如下列範例所示),
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
(
ignoreCase
) 旗標,此外也取代多個符合的項目,這是因為設定了
g
(
global
) 旗標。如需詳細資訊,請參閱
使用規則運算式
。
您可以在取代字串中加入下列
$
取代程式碼。下表顯示的取代文字會插入以代替
$
取代程式碼:
$ 程式碼
|
取代文字
|
$$
|
$
|
$&
|
符合的子字串。
|
$`
|
符合之子字串前面的字串部分。此程式碼會使用半形左單引號字元 (
`
),而非半形單引號 (
'
) 或左智慧單引號 (
'
)。
|
$'
|
符合之子字串後面的字串部分。此程式碼會使用半形單引號 (
'
).
|
$
n
|
第
n
個捕捉到的括號群組相符項目,其中 n 是 1 到 9 的單一位數,而且 $ n 的後面沒有小數位數。
|
$
nn
|
第
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 = parseFloat(usd) * exchangeRate;
const euroSymbol:String = String.fromCharCode(8364);
return euro.toFixed(2) + " " + euroSymbol;
}
當您使用函數做為
replace()
方法的第二個參數時,下列引數會傳遞至函數:
|
|
|