練炭ブログ

萌え壁紙、Irvine、DMonkey、Proxomitron などの情報を扱ってます。

DMonkey: String.split() の動作

コメントなし»

DMonkey の String.split() と ECMAScript/JavaScript/JScript のそれとは、動作がかなり違う。

--
第1引数に文字列を渡すと、正規表現に変換されて処理される。文字列そのもので分割することは出来ない。
'1a.2a-3'.split ('a.')[ '1', '2', '3' ]

. ? * \ といった正規表現でメタキャラクタとして扱われる文字で分割する時は注意する。

内部的には
'string'.split ('pattern')'string'.split (new RegExp ('pattern'))
のように取り扱われているもよう。

--
第2引数、第3引数もあるっぽいけど詳細不明。

--
空文字列で分割すると空配列が返ってくる
'string'.split ('')[ ]

JavaScript のように一文字ずつ分割したい場合は

'string'.split (/()/).slice (1, -1)

とする。ただし正規表現を使っているのでマルチバイト文字が入っていると化ける。

# () の意味はないが // と書くとコメント記法と扱われてしまうので不可。
# /()/ の代わりに '()' でも可。
# じゃあ '' でいいじゃん?ってことになるが何故か出来ない(ふりだしに戻る)。

また、少々長くなるが、以下のような方法でも出来る。

String.prototype.split_ = function (s) {
  if (s != '') {
    return this.split (s);
  }

  var result = [ ];
  var len = this.length;
  for (var i = 0; i < len; ++i) {     result.push (this.charAt (i));   }   return result; }; alert ('string'.split_ (''));

--
空文字列を分割すると、空文字列からなる配列が返ってくる
''.split ('x')[ '' ]

これは JavaScript と同じ。ただし空文字列で分割した場合は空配列になる。

--
引数を省略すると undefined が返ってくる。
'string'.split ()undefined

--
/./ で分割すると、文字数 +1 個の空文字列からなる配列が返ってくる
'abc'.split (/./)[ '', '', '', '' ]

これは JavaScript と同じ。ただし JScript(IE の JavaScript)では空配列になる。

--
第1引数で括弧によるキャプチャを使っても戻り値には含まれない。
'a1b2c'.split (/(\d)/)[ 'a', 'b', 'c' ]

ただし JScript(IE の JavaScript)でも戻り値に含まれない。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です