#2です \マークに関しては、通常string型のリテラルとして変数に代入する場合、エスケープが必要です なので、まず変数の代入の時点で //例 変数str に ?|\ という文字列を代入させたい場合 str = "?|\\"; となります まずここがエラーの原因になっている可能性の一点目 そしてもうひとつが、RegExp内です 前回説明したようにRegExp -> replaceと渡るので"エスケープの\"を表すためにも更にエスケープが必要です jsの (\\?|\\|) とperlの (\?|\|) を比べるとわかりやすいですが、\が倍必要になるということです replace内でエスケープではない文字列の\マーク =1点目で挙げたように \\ を渡したいので、 RegExp内では\\両方をエスケープしてあげる必要があります つまり、めんどくさいことになりますが、\\\\ となるわけです
![JavaScriptでメタ文字エスケープ](https://cdn-ak-scissors.b.st-hatena.com/image/square/a73abc454de4aaacb370bad26db2312eacbc7375/height=288;version=1;width=512/https%3A%2F%2Foshiete.xgoo.jp%2Fimages%2Fsp%2Fqa_recommend%2F2101_2.jpg)