export.xml

'hceT'.sub(/\Z/,'bus').reverse - export.xml と同じことが JavaScript で出来ないかな? ということで、作ってみました。

割と短いです (IE 用):

ダイアリーの「日記を書く」画面で実行すると、書き込みフォームに livedoor Reader の購読フィード一覧がスクリーンショット記法で書き込まれます (多分)。

私自身は、生憎ブラクラとなってしまい実行結果を確認できないんですが(笑、勇気ある方は試してみてください。


Tip として:

この例のように、

/outline\stitle="(.+?)"\shtmlUrl="(.+?)"/

のようなパターンをグローバルに検索し、かつマッチする度に "()" で指定したグループを抜き出すにはどうすれば良いでしょうか?

答えは既に出ているわけですが、String#replace メソッドを使うのが便利です。

あまり知られていないかもしれませんが、replace メソッドは第二引数に、文字列の代わりに関数を受け取ることができます。これがすごく便利で、"()" でマッチした文字列を引数として渡してくれるんです。

つまり、

string.replace(/pa(t)te(r)n/g, function(whole, $1, $2){
  ...
})

とすると、pattern がマッチする毎に関数が呼び出され、その第一引数にはマッチ全体、第二引数以降にはサブマッチ 1, 2... が渡されることになるのです。

replace という名前ではありますが、文字列を置換する目的でなくても利用できる、たいへん便利なメソッドです。

なお、これは元の Ruby のコードで

string.gsub(/pa(t)te(r)n/) {puts ... }

と、置換ではなくプリントのために gsub を使っているのと全く同じことですね。


追記 [20060608]:

最近書いたコード (id:reinyannyan:20060525:p1) の中に、この replace の手法を使うべきなのに使っていない箇所がありました (配列を使用するなど、かなりダサいです)。修正しておきます。