プログラム中の正規表現を使っている関数で、意図しない動作をする箇所があった。 例えば、次のような関数 replace 。引数で渡された文字列を元に正規表現を作り、マッチする文字列を置き換える。 var replace = function(sentence, word, repl){ var r = new RegExp(word, "gi"); return sentence.replace(r, repl); }; console.log(replace("hogepiyohoge", "hoge", "--")); 結果は、 --piyo-- これは問題ない。しかし、ある条件で次のような文字列が渡っているのに気がつかなかった。 console.log(replace("hogepiyo", "|", "--")); 結果を見て、あれ?と。(@_@;) --h--o--g--e--p-