Hatena::Groupsubtech

冬通りに消え行く制服ガールは✖夢物語にリアルを求めない。

 | 

May 13, 2009 (Wed)

JavaScript正規表現メタ文字エスケープ 16:28 はてなブックマーク - JavaScript の正規表現のメタ文字をエスケープ - 冬通りに消え行く制服ガールは✖夢物語にリアルを求めない。

String.prototype.replace は正規表現じゃないと ignore case しつつ global マッチとかできないけど、JavaScript には RegExp.escape 的なものがないのでメタ文字が問題になる。

var escaped = 'f[oo'.replace(/[\s\S]/g, function (_) {
    return '\\u' + (0x10000 + _.charCodeAt(0)).toString(16).slice(1)
});

'F[oobarf[oof[oo'.replace(new RegExp(escaped, 'gi'), 'xxx');

たぶんこれでいける?っぽい。正確にはメタ文字エスケープではなくて、全部エスケープしてメタ文字を無効化しているだけですね。

ignore case しなくてよくて、search が空文字列に絶対ならないなら

'f[oobarf[oo'.split('f[oo').join('xxx');

とかもいいのかな。どんなケースでもうまくいくかまでけんしょうしていないです。(頭まわってない)

前提が抜けてて大変申し分けないのですが、

ので、最も安全で楽な形を考えた、という感じです。

 | 

スポンサード リンク

書いてる人

cho45 (佐藤広央) (www.lowreal.net)

Perl, JavaScript, Ruby, HTML, CSS, Web etc


スポンサード リンク