ストリング内のサブストリングとパターンの検索

サブストリングとは、ストリング内の一部を構成する連続した文字です。たとえば、ストリング "abc" のサブストリングは、"""a""ab""abc""b""bc""c" です。ストリング内のサブストリングは ActionScript のメソッドを使用して抽出できます。

パターンは、ActionScript ではストリングまたは正規表現によって定義されます。たとえば、次の正規表現は、文字 A、B、C の後に数字が続く特定のパターンを定義します (スラッシュは正規表現の区切り記号です)。

/ABC\d/

ActionScript には、ストリング内のパターンを検索し、一致するパターンが見つかった場合に、置換サブストリングと置き換えるメソッドが用意されています。それらのメソッドについては、次のセクションで説明します。

正規表現を使用すると複雑なパターンを定義できます。詳細については、正規表現の使用を参照してください。

サブトピック

文字の位置によるサブストリングの検索
一致するサブストリングの文字の位置の検索
区切り記号で分割されたサブストリングの配列の作成
ストリング内のパターンの検索とサブストリングの置換

文字の位置によるサブストリングの検索

substr()substring() メソッドは似ています。いずれもストリング内のサブストリングを戻り値として返すメソッドです。また、指定するパラメータは 2 つであり、どちらのメソッドでも、最初のパラメータは、与えられたストリングの開始文字の位置です。しかし、substr() メソッドの場合はサブストリングの "長さ" を第 2 パラメータで指定するのに対し、substring() メソッドの場合はサブストリングの "終了位置" を第 2 パラメータで指定します (終了位置にある文字そのものは戻り値に含まれません)。2 つのメソッドの違いを確認できる例を次に示します。

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() メソッドでは大文字と小文字が区別されます。

次のように第 2 パラメータを指定すると、ストリング内で検索を開始する位置を示すことができます。

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() メソッドで次のように第 2 パラメータを指定すると、ストリング内の指定したインデックス位置から先頭に向かって (右から左へ) 検索が実行されます。

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() メソッドの第 2 パラメータはオプションで、返される配列の最大サイズを指定します。

区切り文字には、次のように正規表現を指定することもできます。

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

詳細については、正規表現の使用および『ActionScript 3.0 コンポーネントリファレンスガイド』を参照してください。

ストリング内のパターンの検索とサブストリングの置換

String クラスには、ストリング内のパターンを扱う次のメソッドがあります。

それらのメソッドについては、次のセクションで説明します。

これらのメソッドで使用するパターンは、ストリングまたは正規表現によって定義できます。正規表現の詳細については、正規表現の使用を参照してください。

一致するサブストリングの検索

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

ストリングの先頭にある文字のインデックス位置は 0 なので、この場合は trace() メソッドで 0 が出力されます。正規表現の i フラグを設定することで、大文字と小文字を区別せずに検索を実行しています。

search() メソッドは、一致するサブストリングを 1 つだけ検索してその開始位置のインデックスを返します。たとえ 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() メソッドの機能も search() メソッドと似ており、パターンに一致するサブストリングを検索する点は同じです。ただし、次のように正規表現パターンでグローバルフラグを指定すると、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 桁の数字 (1 ~ 9) であり、$n の後に 10 進数字は続きません。

$nn

括弧指定されたグループの nn 番目にキャプチャされた一致です。nn は 2 桁の 10 進数字 (01 ~ 99) です。nn 番目のキャプチャが未定義の場合、置換テキストは空のストリングになります。

たとえば、一致する 1 番目と 2 番目のキャプチャグループを表す $2 および $1 置換コードを使用した場合を次に示します。

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

replace() メソッドの第 2 パラメータには関数を指定することもできます。その場合は、一致したテキストが、指定した関数の戻り値によって置換されます。

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() メソッドの 2 番目のパラメータとして関数を使用する場合、次の引数が関数に渡されます。


 

このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。 | コメントレポート

現在のページ: http://livedocs.adobe.com/flash/9.0_jp/main/00000084.html