JavaScript String Replace

fukayatsu Advent Calendar 2013 - 13日目

今日遭遇したバグの話

'foo bar'.replace("bar", '$$BAZ$$');
// => "foo $BAZ$"

"$$BAZ$$"が返ってくるのを期待していたコードだったが、
第二引数に$$が含まれる場合、replaceメソッドによって$$$に置換されるため、
意図したとおりに動いていなかった。

次のように修正した。

'foo bar'.replace("bar", '$$BAZ$$'.split('$').join('$$'));
// => "foo $$BAZ$$"