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');
とかもいいのかな。どんなケースでもうまくいくかまでけんしょうしていないです。(頭まわってない)
前提が抜けてて大変申し分けないのですが、
ので、最も安全で楽な形を考えた、という感じです。