ぴよログ

↓に移転したのでこっちは更新されません、多分。

Rubyの正規表現でテキストの置換ができるWebサイト

移転しました →

自分用にテキストの置換ができるwebサービスを作りました。

Regex Replace

背景

正規表現による文字列置換なんかはエディタを使うべきところなのですが、普段からつかっているEmacs正規表現が使い勝手がとても悪いというのがそもそもの原因です。 Emacs正規表現はバックスラッシュのせいでかなり複雑になります。すごくがんばっても置換したい文字列にマッチしないということが多々あるんですが、この間もそのようなことがあってついに爆発しました。そして、もう自分で作るわーとおもいました。

仕様

画面左のフォームに正規表現と置換に使う文字列、置換をかけたい文字列を入力するとリアルタイムに置換を実行しマッチ箇所と置換後の文字列を右側に表示します。マッチ箇所や置換箇所は強調表示されるようになっており、結果を見ながら正規表現を組み立てていくことが可能です。

実装はRails3で行なっています→xoyip/regex-replace

この程度のアプリにRailsを使うのはオーバースペックとは思いますが、、まあ、細かいことを気にしないためですね。

jQueryjavascript)わからん

置換結果をリアルタイムに更新するためにテキストフィールドへの入力イベントなどを受け取ってRailsとやり取りするようにしています。

Request_waiting = 0
$('#form')
  .bind 'ajax:success', (e, data, status, xhr)->
    request_waiting = 0
    $('#match-result').html(data.result)
    $('#input-text-preview').html(data.match)
 
update = ->
  if request_waiting == 0
    $('#form').submit()
    request_waiting = 1
 
$('#regex_form').bind 'keyup change', update
$('#replace_form').bind 'keyup change', update
$('#input_text_form').bind 'keyup chagne', update

テキストフィールドのkeyup、changeのたびにupdate関数を呼び出し、update関数ではformのsubmitを呼んでいます。 そしてformのsubmitでRailsのControllerにAjaxリクエストを投げるという感じにしました。

このやり方だけだとAjaxのリクエストが頻繁に走りすぎてちょっと重いです。 これを1秒に何回までとかそういうふうに制御できたらいいなと思うんですがどのように実装すればいいのかわかりませんでしたので適当なフラグを使ってやってみました。効果があるのかどうかはわかりません。

こういう場合のベストプラクティスはどんな感じなんでしょうかね。。。