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
ストリングの先頭にある文字のインデックス位置は 0 なので、この場合は
trace()
メソッドで 0 が出力されます。正規表現の
i
フラグを設定することで、大文字と小文字を区別せずに検索を実行しています。
search()
メソッドは、一致するサブストリングを 1 つだけ検索してその開始位置のインデックスを返します。たとえ
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()
メソッドの機能も 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 = parseFloat(usd) * exchangeRate;
const euroSymbol:String = String.fromCharCode(8364);
return euro.toFixed(2) + " " + euroSymbol;
}
replace()
メソッドの 2 番目のパラメーターとして関数を使用する場合、次の引数が関数に渡されます。