半角英数字の前後に半角空白を入れる
2008-05-23
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 に変換されちゃう。