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 の手法を使うべきなのに使っていない箇所がありました (配列を使用するなど、かなりダサいです)。修正しておきます。