ホーム < ゲームつくろー! < IKD備忘録

JavaScript(WSH)
文字列解析


 JavaScriptの文字列はStringオブジェクトです。この人そこそこに機能を持っています。前章でやったファイル入力(TextStream)は機能が極力限定的なので、読み込んだ文字列の解析はStringさんに任せるのが正解のようです。基本的なところはだいたい想像ができると思いますので、便利そうな所を押さえていきます。



@ 特定の文字を取り出す

 特定の文字を取り出すにはcharAtメソッドを使います:

var str = String("あいうえお12345かきくけこ");
WScript.Echo(str.charAt(3));

これは3文字目…ではなくて4文字目の「え」が返ります。ここは0基底なんですね。注意です。

 指定箇所の文字列を抜き出すのは幾つか方法があるようなのですが、2種類に分かれるのが面白いところです。1つは「○文字目と▲文字目の間の文字」という場所指定型のもので、

str.substring(2, 5);

とString.substringメソッドを使います。上の場合、3文字目(2要素目)である「う」から5文字目(4要素目)である「お」までが抜き出されます。第2引数の意味を取り間違えないように気を付けたいところです。

 一方で、「○文字目を先頭に■文字だけ抜き出す」という方式もあり、

str.substr(3, 6);

と指定します。第1引数が3要素目である「え」を指し、第2引数がそこから6文字分切り出す事を表しています。結果は「えお1234」と6文字返ります。文字数が足りない場合はそこで終わります。こういう切り出しはあちこちで使われるので必須事項ですね。



A 結合と分割

 文字列の結合は、2文字の結合なら極めて簡単。足し算して終わりです:

var str = String("まるぺけ");
var str2 = String("つくろ〜!");
WScript.Echo(str + str2);

数字も足し算で連結できます:

var str = String("まるぺけ") + 12345;

沢山の文字列を一気に結合する時には配列を利用すると楽です。配列は「Array」:

var strAry = Array("まる", "ぺけ", "つく", "ろ〜");
str = strAry.join("");

これで「まるぺけつくろ〜」という一つながりの文字列ができます。Array.joinメソッドは配列が持っている要素を引数をセパレータにしてくっつけるメソッドです。上のjoinメソッドに「ー」を入れると、

var strAry = Array("まる", "ぺけ", "つく", "ろ〜");
str = strAry.join("ー");

「まるーぺけーつくーろ〜」になります。これはファイルパスやCSVファイルを作る時に大活躍します。

 一方長い文字列を特定の区切り文字で分割し、複数の文字列にして取り出すにはsplitメソッドを用います:

var str = "銅の剣,100,50,30";
var strAry = str.split(",");
for (var i = 0; i < strAry.length; i++)
    WScript.Echo(strAry[i]);

このようにするとstrAryは配列として振る舞い、その中に「動の剣」「100」「50」「30」と要素が入ります。もう分かりやすくCSVファイルの解析で大活躍しそうですよね。



B 置換、大文字化、小文字化

 一部の文字を置換したり英文字を大文字・小文字化する作業は何だかんだで必要になります。置換はString.replaceメソッドです:

var str = "C:\\MyFolder\\Game\\Marupeke.exe";
WScript.Echo(str.replace("\\", "/"));

 上のようにすると「\」が「/」に置き換わる…のですが、全部ではなくて最初に見つけた所で置換が終わってしまいます。見つけたところ全部を置き換えるには、第1引数を正規表現に書き換える必要があります:

WScript.Echo(str.replace(/\\/g, "/"));

こうすると「\」が全部「/」に置き換わります。「/g」というフラグを付けると覚えておくだけでも良いかもしれません。

 英文字の大文字化、小文字化はプログラムで照合する文字列などを作るときなどに良く使われます。C++は大文字小文字を区別するので、テキストにそれらが混在していると面倒になるわけです。双方次のようにします:

var upperStr = str.toUpperCase();  // 大文字化
var lowerStr = str.toLowerCase();  // 小文字化

至って簡単です。