[Javascript] 文字列"0123456789"を"9876543210"に変換する方法

こんにちは。
ハブ?の不調で、1/5の確率でしかメールを送信できないおじいさんです。
で、先ほど15分ぐらい放置していたメールを、「送信できねぇだろ」とポチっと押したら送信できたんですよ。
書きかけだったんですorz
あわてて訂正メールを出そうとしたら、「SMTPサーバが応答しません」(T-T;)
それはさておき、Javascriptの正規表現の話です。

お題
 ・文字列"0123456789"を"9876543210"に変換する

Perlでやってみる

 $str =~ tr/0123456789/9876543210/;


簡単ですね。
では、Rubyでは。。。後日書きますorz

Javascriptではこのようになります。ただし、Firefox限定。


a.replace(new RegExp("(\\d)","g"),
  function() {
    return String(Math.abs(parseInt(RegExp.$1) - 9));
  }
);


IEだと、なぜかfunctionのRegExp.$1が定義されていないんですよね。

Perlは楽だなあ。。。

追記(2008/02/10)
とりあえず、Blockquoteが壊れていたので修正。

ちょっと試してみたんだけれど、やっぱりIEではfunction内部ではRegExp.$1が定義されていない模様。
このため、キャプチャした文字列を相手に何かという事はできないみたい。
やり方がわるいのかなあ。。。


追記(2008/02/12)
IEの場合も含めて、うまく変換する方法はholidays-l開発ブログさんがトラックバックして記事を書いてくださっております。そちらをご覧ください(^-^;)

こちらには、宿題?とばかりにreplace-functionの仕様を置いておきます。
replace-functionってこういうものだったんですねぇ。。。

読みやすい解説の方
 http://developer.mozilla.org/ja/docs/Core_JavaScript_1.5_Reference:Global_Objects:String:replace

読みにくいECMA-262の方
 http://www.ecma-international.org/publications/standards/Ecma-262.htm
 http://www2u.biglobe.ne.jp/~oz-07ams/prog/ecma262r3/15-5_String_Objects.html
 →和訳。
  15.5.4.11 String.prototype.replace (searchValue, replaceValue)に記述があります。

最初に参考にした、非常にいろいろ試行錯誤した方
 http://d.hatena.ne.jp/os0x/20080122/1201002169

ブログ気持玉

クリックして気持ちを伝えよう!

ログインしてクリックすれば、自分のブログへのリンクが付きます。

→ログインへ

なるほど(納得、参考になった、ヘー)
驚いた
面白い
ナイス
ガッツ(がんばれ!)
かわいい

気持玉数 : 0

この記事へのコメント

この記事へのトラックバック