尋找字串中的子字串和樣式Flash Player 9 以及更新的版本,Adobe AIR 1.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)); // 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) 旗標。如需詳細資訊,請參閱使用規則運算式。 您可以在取代字串中加入下列 $ 取代程式碼。下表顯示的取代文字會插入以代替 $ 取代程式碼:
例如,以下示範 $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() 方法的第二個參數時,下列引數會傳遞至函數:
|
|