文字列について(String)
文字列について
■文字列について
■文字列のデータ型について
文字列は、プリミティブ型となります。
基本的で単純なデータ型です。
文字列を他の変数に渡すと、文字列全体が複製され、新しい文字列となります。
■文字コードについて
ActionScript3.0 では、Unicode で動作します。
テキストの読み込みや、テキストの出力などの処理には、UTF-8 が採用されます。
■String クラスについて
String クラスは、文字列用のクラスです。
■文字列から String クラスのプロパティやメソッドを利用する
文字列の後に、ドット演算子や配列アクセス演算子を記述すると、その瞬間だけ String オブジェクトに変換されます。
文字列を作成する
■String コンストラクタについて
String コンストラクタは、使用する事は無いでしょう。
文字列を作成する場合は、文字列リテラルを使用します。
String コンストラクタを使用すると、オブジェクトではなく、文字列を生成する事ができます。
ActionScript 2.0 以前の場合は、こちらで解説しています。
new String ( "文字列" ) :String
第01引数(略可) | String | 文字列を指定する。 |
戻り値 | String | 第01引数で指定した文字列が得られる。 |
文字列を作成する
// ------------------------------------------------------------
// 文字列を作成する
// ------------------------------------------------------------
var str:String = new String("あいうえお");
// 出力テスト
trace(typeof(str)); // "string"
trace(str); // "あいうえお"
■文字列リテラルについて
文字列を作成するには、文字列リテラルを使用します。
文字列全体を、シングルクォーテーション『' '』 か ダブルクォーテーション『" "』でくくります。
文字列リテラルを使って、文字列を作成する
// 文字列を作成する
var str:String = 'あいうえお';
文字列リテラルを使って、文字列を作成する
// 文字列を作成する
var str:String = "かきくけこ";
■文字列中にクォーテーションマークを利用する
『' '』 でくくった場合、文字列内に『 ' 』と記述する事はできません。
かわりに、『 \' 』と記述します。
『" "』 でくくった場合、文字列内に『 " 』と記述する事はできません。
かわりに、『 \" 』と記述します。
エスケープ文字を使用して、文字列中にクォーテーションを利用する
var str:String;
str = '<element attribute = "value" >';
str = "<element attribute = 'value' >";
str = '<element attribute = \'value\' >';
str = "<element attribute = \"value\" >";
■シングルクォーテーションとダブルクォーテーションの違いについて
必要となるエスケープ文字が変化するだけです。
C 言語のように、シングルクォーテーションを使って、1文字を表現する事はできません。
CGI スクリプトのように、ダブルクォーテーションを使って、変数の中身を展開する事はできません。
■文字列の連結について
■文字列と文字列の連結について
連結演算子『 + 』『 += 』を使用すると、文字列同士を連結する事ができます。
2つの文字列を連結し、新しい1つの文字列が生成されます。
文字列の最後尾に、任意の文字列を連結する
// ------------------------------------------------------------
// 文字列を作成する
// ------------------------------------------------------------
var str:String = "あいうえお";
// ------------------------------------------------------------
// 文字列の最後尾に、任意の文字列を連結する
// ------------------------------------------------------------
str += "かきくけこ";
// 出力テスト
trace(str); // "あいうえおかきくけこ"
文字列同士を連結し、新しい文字列を生成する
// ------------------------------------------------------------
// 文字列を作成する
// ------------------------------------------------------------
var str0:String = "あいうえお";
var str1:String = "かきくけこ";
// ------------------------------------------------------------
// 文字列同士を連結し、新しい文字列を生成する
// ------------------------------------------------------------
var str2:String = str0 + str1;
// 出力テスト
trace(str2); // "あいうえおかきくけこ"
■数値と文字列の連結について
「数値」と「文字列」を連結すると、結果は「文字列」となります。
「数値」と「文字列」を連結した場合の動作を確認する
// 文字列を作成する
var str:String = 123 + "あいう";
// 出力テスト
trace(str); // "123あいう
■数値の計算と、文字列の連結が混在している場合
例えば、以下のような連結を行います。
数値の計算と、文字列の連結が混在している場合
// 文字列を作成する
var str:String = 1 + 2 + 3 + "あいう" + 49 + 58 + 67 + "かきく";
// 出力テスト
trace(str); // "6あいう495867かきく"
左から順番に計算されます。
「 1 + 2 + 3 」までは、数値同士の計算です。
それ以降の「 "あいう" + 49 + 58 + 67 + "かきく" 」は、文字列としての連結となります。
丸括弧 () を付けると、先に計算を発生させる事ができます。
数値の計算と、文字列の連結が混在している場合は、数値の計算部分に、できるだけ丸括弧 () を付けておくといいでしょう。
「数値」の計算を先に行いたい場合は、丸括弧を付ける
// 文字列を作成する
var str:String = (1 + 2 + 3) + "あいう" + (49 + 58 + 67) + "かきく";
// 出力テスト
trace(str); // "6あいう174かきく"
■文字列の比較について
■文字列同士が一致しているか調べる
厳密等価演算子『 === 』を使用すると、文字列同士が一致しているか調べる事ができます。
文字列同士が一致しているか調べる
// ------------------------------------------------------------
// 文字列を作成する
// ------------------------------------------------------------
var str0:String = "あいうえお";
var str1:String = "あいうえお";
// ------------------------------------------------------------
// 文字列が一致しているか調べる
// ------------------------------------------------------------
var result:Boolean = (str0 === str1);
// 出力テスト
trace(result); // true
■文字列同士を比較する
比較演算子『 < 』『 > 』を使用すると、文字列同士を比較する事ができます。
文字コードの大小を比較します。
localeCompare() メソッドを使って比較する事もできます。
文字列同士を比較する
// ------------------------------------------------------------
// 文字列を作成する
// ------------------------------------------------------------
var str0:String = "あああああ";
var str1:String = "ああああい";
// ------------------------------------------------------------
// 文字列を比較する
// ------------------------------------------------------------
if(str0 === str1){
trace("厳密に等しい");
}else if(str0 < str1){
trace(str0 + " < " + str1);
}else if(str0 > str1){
trace(str0 + " > " + str1);
}
String クラスのプロパティについて
■length プロパティ
文字の総数を取得するには、length プロパティを使用します。
文字の総数を調べる
// 文字列を作成する
var str:String = "あいうえお";
// 文字の総数を取得
var num:int = str.length;
// 出力テスト
trace(num); // 5
String クラスのメソッドについて
■String クラスのメソッド一覧
String クラスには、以下のメソッドがあります。
メソッド | 説明 |
String.fromCharCode() | 文字コードを指定して、文字列を取得する。 |
charAt() | 位置を指定して、文字列から1文字を取得する。 |
charCodeAt() | 位置を指定して、文字列から文字コードを取得する。 |
concat() | 2つ以上の文字列を繋げて、新しい文字列を取得する。 |
slice() | 開始位置と終了位置を指定して、新しい文字列を取得する。 |
substring() | 開始位置と終了位置を指定して、新しい文字列を取得する。(逆指定可) |
substr() | 開始位置と個数を指定して、新しい文字列を取得する。 |
indexOf() | 最先頭から文字列内を検索し、見つかった位置を取得する。 |
lastIndexOf() | 最後尾から文字列内を検索し、見つかった位置を取得する。 |
localeCompare() | 文字列同士を比較する。 |
toLowerCase() | 大文字を小文字に変換した結果を取得する。(通常) |
toUpperCase() | 小文字を大文字に変換した結果を取得する。(通常) |
toLocaleLowerCase() | 大文字を小文字に変換した結果を取得する。(実行環境のロケールを考慮) |
toLocaleUpperCase() | 小文字を大文字に変換した結果を取得する。(実行環境のロケールを考慮) |
■正規表現に対応しているメソッド
メソッド | 説明 |
split() | 指定したワードで文字列を分割し、結果を配列で取得する。 |
search() | 文字列内を検索し、マッチした位置を取得する。 |
match() | 文字列内を検索し、マッチした文字列を取得する。 |
replace() | 文字列を置換した結果を、新しい文字列として取得する。 |
■String.fromCharCode() メソッド
文字コードを指定して、文字列を取得するには、String.fromCharCode() メソッドを使用します。
Unicode を指定します。
String.fromCharCode( 文字コード ... ) :String
可変引数(略可) | Number | 文字コードを指定する。可変引数から複数の文字コードの指定が可能。 |
戻り値 | String | 文字列が得られる。存在しない場合、空文字が得られる。 |
■取得例
文字コードを指定して、1文字を取得する。
// 文字コードを指定して、1文字を取得する
var c0:String = String.fromCharCode(0x41);
var c1:String = String.fromCharCode(0x3042);
// 出力テスト
trace(c0); // "A"
trace(c1); // "あ"
文字コードを順番に指定して、文字列を取得する。
// 文字コードを順番に指定して、文字列を取得する。
var str:String = String.fromCharCode(0x41,0x42,0x43,0x44,0x45,0x46,0x47);
// 出力テスト
trace(str); // "ABCDEFG"
■charAt() メソッド
位置を指定して、文字列から1文字を取得するには、charAt() メソッドを使用します。
String.charAt( 位置 ) :String
第01引数(略可) | Number | 位置を指定する。デフォルトは 0 |
戻り値 | String | 1文字だけ格納された文字列が得られる。存在しない場合、空文字が得られる。 |
■取得例
位置を指定して、文字列から1文字を取得する。
// 文字列を作成
var str:String = "あいうえお";
// 位置を指定して、文字列から1文字を取得する
var c0:String = str.charAt(1);
var c1:String = str.charAt(3);
// 出力テスト
trace(c0); // "い"
trace(c1); // "え"
■charCodeAt() メソッド
位置を指定して、文字列から文字コードを取得するには、charCodeAt() メソッドを使用します。
Unicode が得られます。
String.charCodeAt( 位置 ) :Number
第01引数(略可) | Number | 位置を指定する。デフォルトは 0 |
戻り値 | Number | 文字コードが得られる。存在しない場合、NaN 値が得られる。 |
■取得例
位置を指定して、文字列から文字コードを取得する。
// 文字列を作成
var str:String = "あいうえお";
// 位置を指定して、文字列から文字コードを取得する
var c0:Number = str.charCodeAt(0);
var c1:Number = str.charCodeAt(3);
// 出力テスト
trace(c0); // 12354 (0x3042)
trace(c1); // 12360 (0x3048)
任意の文字コードを取得する。
// 'あ' の文字コードを取得
var c:Number = 'あ'.charCodeAt();
// 出力テスト
trace(c); // 12354 (0x3042)
■concat() メソッド
String.concat( 文字列 ... ) :String
可変引数(略可) | String | 連結したい文字列を指定。引数の最先頭から最後尾の順番で結合される。 |
戻り値 | String | 新しい文字列が得られる。 |
■使用例
2つの文字列を結合して、新しい文字列を取得する。
// 文字列を作成
var str0:String = "あいうえお";
var str1:String = "かきくけこ";
// 文字列を結合して、新しい文字列を取得する
var str2:String = str0.concat(str1);
// 出力テスト
trace(str2); // "あいうえおかきくけこ"
4つの文字列を結合して、新しい文字列を取得する。
// 文字列を結合して、新しい文字列を取得する
var str:String = "あいう".concat("え" , "おか" , "き" , "くけこ");
// 出力テスト
trace(str); // "あいうえおかきくけこ"
■slice() メソッド
開始位置と終了位置を指定して、新しい文字列を取得するには、slice() メソッドを使用します。
substring() メソッドと違い、開始位置と終了位置を、逆に指定する事はできません。
第02引数で指定する終了位置は、取得対象に含まれません。
String.slice( 開始位置 , 終了位置 ) :String
第01引数(略可) | Number | 開始位置を指定。(0 から始まる番号)デフォルトは 0 |
第02引数(略可) | Number | 終了位置を指定。(0 から始まる番号)省略した場合は最後尾まで。 マイナス値を指定すると「length + 第02引数」 の位置。(-1で最後尾は含まれない) |
戻り値 | String | 新しい文字列が得られる。 |
■使用例
開始位置と終了位置を指定して、新しい文字列を取得する
// 文字列を作成
var str0:String = "あいうえおかきくけこ";
// 開始位置と終了位置を指定して、新しい文字列を取得する
var str1:String = str0.slice(2,5);
// 出力テスト
trace(str1); // "うえお"
■substring() メソッド
開始位置と終了位置を指定して、新しい文字列を取得するには、substring() メソッドを使用します。
slice() メソッドと違い、開始位置と終了位置を、逆に指定しても動作します。
終了位置は、取得対象に含まれません。
String.substring( 開始位置 , 終了位置 ) :String
第01引数(略可) | Number | 開始位置を指定。(0 から始まる番号)デフォルトは 0 |
第02引数(略可) | Number | 終了位置を指定。(0 から始まる番号)省略した場合は最後尾まで。 第01引数より小さい値を指定した場合、第02引数が開始位置となり、第01引数が終了位置となる。 |
戻り値 | String | 新しい文字列が得られる。 |
■使用例
開始位置と終了位置を指定して、新しい文字列を取得する
// 文字列を作成
var str0:String = "あいうえおかきくけこ";
// 開始位置と終了位置を指定して、新しい文字列を取得する
var str1:String = str0.substring(2,5);
// 出力テスト
trace(str1); // "うえお"
■substr() メソッド
開始位置と個数を指定して、新しい文字列を取得するには、substr() メソッドを使用します。
String.substr( 開始位置 , 個数 ) :String
第01引数(略可) | Number | 開始位置を指定。(0 から始まる番号)デフォルトは 0 |
第02引数(略可) | Number | 個数を指定。省略した場合は最後尾まで。0 以下の値を指定すると空文字が得られる。 |
戻り値 | String | 新しい文字列が得られる。 |
■使用例
開始位置と個数を指定して、新しい文字列を取得する
// 文字列を作成
var str0:String = "あいうえおかきくけこ";
// 開始位置と個数を指定して、新しい文字列を取得する
var str1:String = str0.substr(5,3);
// 出力テスト
trace(str1); // "かきく"
■indexOf() メソッド
最先頭から文字列内を検索し、見つかった位置を取得するには、indexOf() メソッドを使用します。
最先頭からではなく、途中から検索を開始したい場合は、第02引数に開始位置を指定します。
String.indexOf( "検索ワード" , 検索開始位置 ) :int
第01引数(略可) | String | 検索ワードを指定。 |
第02引数(略可) | Number | 検索を開始する位置を指定。デフォルトは 0 |
戻り値 | int | ワードが見つかった場合、位置が得られる。ワードが見つからなかった場合、-1 が得られる。 |
■使用例
最先頭から文字列内を検索し、見つかった位置を取得する
// 文字列を作成
var str:String = "---あいう-----";
// 最先頭から文字列内を検索する
var pos:Number = str.indexOf("あいう");
// 出力テスト
trace(pos); // 3
本文全体を、最先頭から順番に検索する
// 検索本文
var source:String = "--あいう------あいう--あいう------あいう--------";
// 検索ワード
var search:String = "あいう";
// 検索位置
var pos:Number = 0;
while(true){
// 指定位置から文字列内を検索する
pos = source.indexOf(search,pos);
// 見つからなかった場合終了
if(pos == -1) break;
// 出力テスト
trace("pos:" + pos);
// 次の検索開始位置
pos += search.length;
}
■lastIndexOf() メソッド
最後尾から文字列内を検索し、見つかった位置を取得するには、lastIndexOf() メソッドを使用します。
最後尾からではなく、途中から検索を開始したい場合は、第02引数に開始位置を指定します。
例えば、文字列の最後尾から調べるなら、( length - (検索ワードの文字数) ) を指定します。
例えば、文字列の最後尾の1つ前から調べるなら、( length - (検索ワードの文字数) - 1 ) を指定します。
String.lastIndexOf( "検索ワード" , 検索開始位置 ) :int
第01引数(略可) | String | 検索ワードを指定。 |
第02引数(略可) | Number | 検索を開始する位置を指定。デフォルトは最後尾から。マイナス値を指定した場合、見つからない。 |
戻り値 | int | ワードが見つかった場合、位置が得られる。ワードが見つからなかった場合、-1 が得られる。 |
■使用例
最後尾から文字列内を検索し、見つかった位置を取得する
// 文字列を作成
var str:String = "-----あいう---";
// 最後尾から文字列内を検索する
var pos:Number = str.lastIndexOf("あいう");
// 出力テスト
trace(pos); // 5
本文全体を、最後尾から順番に検索する
// 検索本文
var source:String = "--あいう------あいう--あいう------あいう--------";
// 検索ワード
var search:String = "あいう";
// 検索位置
var pos:Number = source.length;
while(pos >= 0){
// 指定位置から文字列内を検索する
pos = source.lastIndexOf(search,pos);
// 見つからなかった場合終了
if(pos == -1) break;
// 出力テスト
trace("pos:" + pos);
// 次の検索開始位置
pos -= search.length;
}
■localeCompare() メソッド
文字列同士を比較するには、localeCompare() メソッドを使用します。
第02引数以降は、実装されていません。指定すると、コンパイルエラーとなります。
最後に比較した、文字コードの減算値が得られます。
例えば、"あ" と "い" と比較した場合、0x3042 - 0x3044 ⇒ -2 となります。
比較演算子を使って、調べる事もできます。
String.localeCompare( "比較文字列" , ... ) :int
第01引数(略可) | String | 比較文字列を指定。 |
可変引数(略可) | * | 未実装 |
戻り値 | int | 第01引数の方が大きいなら負数、一致するなら 0、小さいなら正数が得られる。 |
■使用例
文字列同士を比較する
// 文字列を作成
var str0:String = "あああああ";
var str1:String = "ああああい";
// 文字列同士を比較する
var result:int = str0.localeCompare(str1);
// 出力テスト
trace(result); // -2
■toLowerCase() メソッド
大文字を小文字に変換した結果を取得するには、toLowerCase() メソッドを使用します。
■使用例
大文字を小文字に変換する
// 文字列を作成
var str0:String = "AbCdEfG";
// 大文字を小文字に変換する
var str1:String = str0.toLowerCase();
// 出力テスト
trace(str1); // "abcdefg"
■toUpperCase() メソッド
小文字を大文字に変換した結果を取得するには、toUpperCase() メソッドを使用します。
■使用例
小文字を大文字に変換する
// 文字列を作成
var str0:String = "AbCdEfG";
// 小文字を大文字に変換する
var str1:String = str0.toUpperCase();
// 出力テスト
trace(str1); // "ABCDEFG"
■toLocaleLowerCase() メソッド
大文字を小文字に変換した結果を取得するには、toLocaleLowerCase() メソッドを使用します。
現状は、toLowerCase() メソッドと、同じ結果が得られます。
実行環境のロケールを考慮するよう想定されていますが、未実装です。
■使用例
大文字を小文字に変換する
// 文字列を作成
var str0:String = "AbCdEfG";
// 大文字を小文字に変換する(実行環境のロケールを考慮)
var str1:String = str0.toLocaleLowerCase();
// 出力テスト
trace(str1); // "abcdefg"
■toLocaleUpperCase() メソッド
小文字を大文字に変換した結果を取得するには、toLocaleUpperCase() メソッドを使用します。
現状は、toUpperCase() メソッドと、同じ結果が得られます。
実行環境のロケールを考慮するよう想定されていますが、未実装です。
■使用例
小文字を大文字に変換する
// 文字列を作成
var str0:String = "AbCdEfG";
// 小文字を大文字に変換する(実行環境のロケールを考慮)
var str1:String = str0.toLocaleUpperCase();
// 出力テスト
trace(str1); // "ABCDEFG"
■split() メソッド
指定したワードで文字列を分割し、結果を配列で取得するには、split() メソッドを使用します。
このメソッドは、正規表現に対応しています。
このメソッドを使用した場合、正規表現オブジェクトの中身は変化しません。
String.split( 検索ワード , 分割制限 ) :Array
第01引数(略可) | * | 検索ワードを指定。「文字列」や「正規表現オブジェクト」の指定が可能。空文字を指定した場合、1文字つずつ分割される。 |
第02引数(略可) | Number | 分割を試みる回数の上限値を指定する。省略した場合、文字列の最後尾まで試みる。 |
戻り値 | Array | 新しい配列が得られる。ワードが見つからなかった場合、0 番目に元の文字列がそのまま格納されている。 |
■使用例
指定したワードで文字列を分割し、結果を配列で取得する
// 文字列を作成
var str:String = "あ=いい=ううう=ええ=お";
// 文字列を分割し、配列を取得する
var ary:Array = str.split("=");
// 出力テスト
trace(ary); // [ "あ" , "いい" , "ううう" , "ええ" , "お" ]
指定したワードで文字列を、最大で2回まで分割し、結果を配列で取得する
// 文字列を作成
var str:String = "AAAandBBandCCCandDandEEE";
// 文字列を最大で2回まで分割し、配列を取得する
var ary:Array = str.split("and" , 2);
// 出力テスト
trace(ary); // [ "AAA" , "BB" ]
正規表現を使って、文字列を分割し、結果を配列で取得する
// ------------------------------------------------------------
// 文字列を作成
// ------------------------------------------------------------
var str:String = "AAA--BB----CCC--D--------EEE";
// ------------------------------------------------------------
// 正規表現オブジェクトを作成
// ------------------------------------------------------------
var re:RegExp = new RegExp("[-]+","");
// ------------------------------------------------------------
// 文字列を分割し、配列を取得する
// ------------------------------------------------------------
var ary:Array = str.split(re);
// ------------------------------------------------------------
// 出力テスト
// ------------------------------------------------------------
trace(ary); // [ "AAA" , "BB" , "CCC" , "D" , "EEE" ]
■search() メソッド
マッチした位置を取得するには、search() メソッドを使用します。
このメソッドは、正規表現に対応しています。
このメソッドを使用した場合、正規表現オブジェクトの中身は変化しません。
結果が 0 以上であるか調べると、match() メソッドよりも高速で、正規表現がマッチしていると判定する事ができます。
文字列の途中から調べる事はできません。
途中から調べたい場合、RegExp クラスのメソッドを使用します。
String.search( 検索ワード ) :int
第01引数(略可) | * | 検索ワードを指定。「文字列」や「正規表現オブジェクト」の指定が可能。 |
戻り値 | int | 正規表現がマッチする場合、開始位置が得られる。正規表現がマッチしなかった場合、-1 が得られる。 |
■使用例
検索ワードとマッチする位置を取得する
// 文字列を作成
var str:String = "あいうえおかきくけこさしすせそ";
// マッチする位置を取得する
var index:int = str.search("かきくけこ");
// 出力テスト
trace(index); // 5
正規表現とマッチする位置を取得する
// ------------------------------------------------------------
// 文字列を作成
// ------------------------------------------------------------
var str:String = "あいうえおかきくけこさしすせそ";
// ------------------------------------------------------------
// 正規表現オブジェクトを作成
// ------------------------------------------------------------
var re:RegExp = new RegExp("(か)(.+)(こ)","");
// ------------------------------------------------------------
// 正規表現とマッチする位置を取得する
// ------------------------------------------------------------
var index:int = str.search(re);
// マッチした
if(index >= 0){
// ------------------------------------------------------------
// 出力テスト
// ------------------------------------------------------------
trace(index); // 5
}
■match() メソッド
文字列内を検索し、マッチした文字列を取得するには、match() メソッドを使用します。
このメソッドは、正規表現に対応しています。
このメソッドを使用した場合、正規表現オブジェクトの中身は変化しません。
真偽結果のみを得たい場合は、search() メソッドを使用した方が、高速に動作します。
String.match( 検索ワード ) :*
第01引数(略可) | * | 検索ワードを指定。「文字列」や「正規表現オブジェクト」の指定が可能。 |
戻り値 | * | マッチする場合、オブジェクトが得られる。マッチしない場合、null が得られる。 |
■戻り値 (繰り返しフラグ "g" の指定が無い場合)
マッチしなかった場合、null が得られます。
マッチする場合、オブジェクトが得られます。
オブジェクトは、配列のように中身を取り出す事ができます。
0 番目には、マッチした全体の文字列が格納されています。
1 番目以降には、マッチした丸括弧 () 内の文字列が、順番に格納されています。
その他には、以下のプロパティが存在します。
プロパティ | 型 | 説明 |
index | Number | 正規表現とマッチした文字列の位置。 |
input | String | マッチを試みた文字列全体。 |
正規表現とマッチした部分の文字列を取得する
// ------------------------------------------------------------
// 文字列を作成
// ------------------------------------------------------------
var str:String = "あいうえおかきくけこさしすせそ";
// ------------------------------------------------------------
// 正規表現オブジェクトを作成
// ------------------------------------------------------------
var re:RegExp = new RegExp("(か)(.+)(こ)","");
// ------------------------------------------------------------
// 正規表現とマッチした部分の文字列を取得する
// ------------------------------------------------------------
var m:Object = str.match(re);
// マッチした
if(m){
// ------------------------------------------------------------
// 出力テスト
// ------------------------------------------------------------
// 全体マッチ
trace(m[0]); // "かきくけこ"
// 丸括弧内のマッチ
trace(m[1]); // "か"
trace(m[2]); // "きくけ"
trace(m[3]); // "こ"
// その他のプロパティ
trace(m.input); // "あいうえおかきくけこさしすせそ"
trace(m.index); // 5
}
■戻り値 (繰り返しフラグ "g" の指定がある場合)
マッチしなかった場合、null が得られます。
マッチする場合、配列が得られます。
繰り返しマッチした回数だけ、配列の要素数が増えます。
配列の中には、 0 番目から順番に、マッチした部分の文字列が格納されています。
正規表現の、丸括弧 () 内とマッチした結果を、取得する事はできません。
繰り返しフラグが存在する場合の動作を確認する
// ------------------------------------------------------------
// 文字列を作成
// ------------------------------------------------------------
var str:String = "あいうえおかきくけこさしすせそ";
// ------------------------------------------------------------
// 正規表現オブジェクトを作成
// ------------------------------------------------------------
var re:RegExp = new RegExp("[あ-ん]{5}","g");
// ------------------------------------------------------------
// 正規表現とマッチした部分の文字列を取得する
// ------------------------------------------------------------
var m:Array = str.match(re);
// マッチした
if(m){
// ------------------------------------------------------------
// 出力テスト
// ------------------------------------------------------------
// マッチ総数
trace(m.length); // 3
// 1回目の全体マッチ
trace(m[0]); // "あいうえお"
// 2回目の全体マッチ
trace(m[1]); // "かきくけこ"
// 3回目の全体マッチ
trace(m[2]); // "さしすせそ"
}
■replace() メソッド
文字列を置換した結果を、新しい文字列として取得するには、replace() メソッドを使用します。
このメソッドは、正規表現に対応しています。
このメソッドを使用した場合、正規表現オブジェクトの中身は変化しません。
String.replace( 検索 , 置換 ) :String
第01引数(略可) | * | 検索文字列を指定する。「文字列」もしくは「正規表現オブジェクト」の指定が可能。 |
第02引数(略可) | * | 置換文字列を指定する。「文字列」もしくは「コールバック関数」の指定が可能。 |
戻り値 | String | 置換後の結果を、新しい文字列として得られる。 |
■第01引数 (文字列を指定した場合)
第01引数に文字列を指定した場合、一度だけ置換されます。
文字列を検索し、置換した結果を取得する
// ------------------------------------------------------------
// 文字列を作成
// ------------------------------------------------------------
var str0:String = "あい▲▲▲えお";
// ------------------------------------------------------------
// "▲▲▲" を "う" に置換する
// ------------------------------------------------------------
var str1:String = str0.replace("▲▲▲","う");
// ------------------------------------------------------------
// 出力テスト
// ------------------------------------------------------------
trace(str1); // "あいうえお"
■第01引数 (正規表現オブジェクトを指定した場合)
正規表現には、丸括弧 () を含める事ができます。
検索と置換を、最後まで繰り返したい場合は、"g" フラグを追加します。
正規表現オブジェクトを作成(繰り返しフラグ付き)
// 正規表現オブジェクトを作成(繰り返しフラグ付き)
var re:RegExp = new RegExp("(.)","g");
■第02引数 (文字列を指定した場合)
第02引数に、文字列型を指定した場合の動作です。
第01引数に正規表現オブジェクトを指定した場合、以下のドルエスケープ文字の記述が可能です。
エスケープ文字 | 説明 |
$$ | $ 文字の代替。 |
$1 ~ $99 | n 番目の丸括弧とマッチした文字列を展開する。 |
$& (U+0026) | マッチした文字列全体を展開する。 |
$` (U+0060) | 最先頭から、マッチした直前までの文字列を展開する。 |
$' (U+0027) | マッチした直後から、最後尾までの文字列を展開する。 |
ドルエスケープ文字の展開を確認する
// 文字列を作成
var str0:String = "あいうえおかき";
// 正規表現オブジェクトを作成
var re:RegExp = new RegExp("(う)(え)(お)","");
// 文字列を置換する
var str1:String = str0.replace(re,"| left:$` match:$& p1:$1 p2:$2 p3:$3 right:$' |");
// 出力テスト
trace(str1); // "...| left:あい match:うえお p1:う p2:え p3:お right:かき |..."
■第02引数 (コールバック関数を指定した場合)
第02引数に、関数型を指定した場合の動作です。
コールバック関数の仕様は、以下の通りです。
第01引数から、マッチした全体の文字列が得られます。
第02引数以降は、可変引数となります。
正規表現内の、丸括弧 () とマッチした文字列が、順番に得られます。
丸括弧の数だけ、引数を用意する必要があります。
(最終引数 - 1)から、マッチした文字列の位置が得られます。
最終引数から、文字列全体が得られます。
戻り値からは、置換後の文字列を返します。
正規表現オブジェクトに、繰り返しフラグ "g" の指定がある場合、コールバック関数は、繰り返し呼び出されます。
■使用例
正規表現オブジェクトを使って、繰り返し検索しすべて置換する
// ------------------------------------------------------------
// 文字列を作成
// ------------------------------------------------------------
var str0:String = "□●●□□●●●□";
// ------------------------------------------------------------
// 正規表現オブジェクトを作成(繰り返しフラグ付き)
// ------------------------------------------------------------
var re:RegExp = new RegExp("□","g");
// ------------------------------------------------------------
// "□" を "■" に置換する(文字列指定)
// ------------------------------------------------------------
var str1:String = str0.replace(re,"■");
// ------------------------------------------------------------
// 出力テスト
// ------------------------------------------------------------
trace(str1); // "■●●■■●●●■"
// ------------------------------------------------------------
// "□" を "■" に置換する(コールバック関数指定)
// ------------------------------------------------------------
var str2:String = str0.replace(re,function ( m:String , index:Number , str:String ) :String {
// 出力テスト
trace("index:" + index);
// 置換する文字列を返す
return "■";
});
// ------------------------------------------------------------
// 出力テスト
// ------------------------------------------------------------
trace(str2); // "■●●■■●●●■"
丸括弧の展開動作を確認する
// ------------------------------------------------------------
// 文字列を作成
// ------------------------------------------------------------
var str0:String = "★★★http://sub.example.com/aaa/bbb/ccc.html★★★";
// ------------------------------------------------------------
// 正規表現オブジェクトを作成
// ------------------------------------------------------------
var re:RegExp = new RegExp("([a-z]*:)[/]*([^/]+)/([^?#]*)","");
// ------------------------------------------------------------
// ドルエスケープ文字を使って、丸括弧内を展開する
// ------------------------------------------------------------
var str1:String = str0.replace(re,"「$1」「$2」「$3」");
// ------------------------------------------------------------
// 出力テスト
// ------------------------------------------------------------
trace(str1); // "★★★「http:」「sub.example.com」「aaa/bbb/ccc.html」★★★"
// ------------------------------------------------------------
// コールバック関数を使って、丸括弧内を展開する
// ------------------------------------------------------------
var str2:String = str0.replace(re,function ( m:String , p1:String , p2:String , p3:String , index:Number , str:String ) :String {
// 出力テスト
trace(arguments);
// 置換する文字列を返す
return "「" + p1 + "」「" + p2 + "」「" + p3 + "」";
});
// ------------------------------------------------------------
// 出力テスト
// ------------------------------------------------------------
trace(str2); // "★★★「http:」「sub.example.com」「aaa/bbb/ccc.html」★★★"
置換機能を使わずに、繰り返し検索として活用する
// ------------------------------------------------------------
// HTML 文字列を作成
// ------------------------------------------------------------
var text_html:String =
'<html>\n' +
' <body>\n' +
' <img src="http://sub.example.com/graphics/aaa.jpg">\n' +
' <img src="http://sub.example.com/graphics/bbb.jpg">\n' +
' <img src="http://sub.example.com/graphics/ccc.jpg">\n' +
' </body>\n' +
'</html>';
// ------------------------------------------------------------
// 正規表現オブジェクトを作成(繰り返しフラグ付き)
// ------------------------------------------------------------
var re:RegExp = new RegExp('<img[ \t\r\n]+[^>]*src[ \t\r\n]*=[ \t\r\n]*"([^"]+)"',"g");
// ------------------------------------------------------------
// 繰り返し検索(置換機能を無視)
// ------------------------------------------------------------
text_html.replace(re,function ( m:String , p1:String , index:Number , str:String ) :void {
// 出力テスト
trace(arguments);
trace("index:" + index);
trace("p1:" + p1);
trace(" --- ");
});
数値型から文字列に変換する
■String() 関数を使用する
任意のデータを、文字列に変換するには、String() 関数を使用します。
String ( Object ) :String
第01引数(略可) | Object | 任意のデータを指定。 |
戻り値 | String | 文字列に変換した結果が得られる |
String() 関数を使って、文字列型に変換する
// 数値を作成する
var value:Number = 123.456;
// 文字列に変換する
var str:String = String(value);
// 出力テスト
trace(str); // "123.456"
trace(typeof(str)); // "string"
■連結演算子を使って、空文字列を連結する
任意のデータを、空文字列と連結すると、文字列に変換する事ができます。
空文字と連結して、文字列に変換する
// 数値を作成する
var value:Number = 123.456;
// 空文字と連結して、文字列に変換する
var str:String = "" + value;
// 出力テスト
trace(str); // "123.456"
trace(typeof(str)); // "string"
文字列リテラルのエスケープについて
■文字列リテラルのエスケープについて
■エスケープ文字について
エスケープシーケンスの一覧です。
表記 | Unicode | 説明 |
\\ | U+005C | バックスラッシュ(円記号) |
\b | U+0008 | バックスペース |
\f | U+000C | フォームフィード |
\n | U+000A | ラインフィード(改行コード) |
\r | U+000D | キャリッジ・リターン(改行コード) |
\t | U+0009 | 水平タブ |
\v | U+000B | 垂直タブ |
\' | U+0027 | シングルクォーテーション |
\" | U+0022 | ダブルクォーテーション |
エスケープ文字を含めた文字列を作成する
var str:String = "\tあいうえお\n\tかきくけこ";
■ Unicodeスカラ値について
\uFFFF と記述すると、Unicode 1文字分を表現できます。
FFFF の部分には、ユニコードを 16 進数で表記します。
サロゲートペアとなるコードは、2つに分けて表記します。
例えば、U+10FFFF 文字は、\uD83F\uDFFF と表記します。
Unicodeスカラ値を含めた文字列を作成する
var str:String = "\u3042 \u3044 \u3046 \u3048 \u304a";
■ Hexスカラ値について
\xFF と記述すると、0 ~ 255 までの1文字分を表現できます。
FF の部分には、0 ~ 255 までの値を、16 進数で表記します。
Hexスカラ値を含めた文字列を作成する
var str:String = "\x41 \x44 \x47 \x4a \x4c";