at posts/single.html

半角英数字の前後に半角空白を入れる

id:dropdb さんのつぶやきより。

関係ないけど自動的に、半角英数字の前後には半角空白を入れるようにしたい。

正規表現でごにょごにょドーンすればいいのかな。

同じくいつも手動でスペースを入れているなぁ。 面白そうなので作ってみた。

insertSpace(document.body)

とすると、再帰的に子ノードをたどって、テキストノードを見つけたら半角英数字の前後にスペースを入れてる。 ループの方法は、jQuery の text() メソッドのソース を参考にした。

function insertSpace(element) {
  // [!-~]は記号と英数字 (ASCIIコード0x21~0x7e)
  var re1 = /([^!-~\s])([!-~])/g;
  var re2 = /([!-~])([^!-~\s])/g;
  for(var i = 0, length = element.childNodes.length; i < length; i++) {
    var childNode = element.childNodes[i];
    switch(childNode.nodeType) {
    case 1: // ELEMENT_NODE
      insertSpace(childNode);
      break;
    case 3: // TEXT_NODE
      childNode.nodeValue = 
        childNode.nodeValue.replace(re1, "$1 $2");
      childNode.nodeValue = 
        childNode.nodeValue.replace(re2, "$1 $2");
      break;
    }
  }
}

関係ないけど、 Mac だとバックスラッシュを

alt + \

で入力しないとダメなんだね。 ずっと \s がスペースにマッチせずに悩んでたよ。

追記

トラックバックを送ってから気がついたけど、すでに解決済みだったのね。

replace(/([\x21-\x7E]+)/g,"%20$1%20")

[ ] の内側でも16進で指定できるんだ。なるほど。 これだと半角英数から始まる行の先頭に空白が入っちゃうけど、はてな記法だと問題ないのかな? tDiary の Wiki 記法だと pre に変換されちゃう。

関連する日記