При использовании функции замены регулярного выражения в строке, содержащей некоторую комбинацию метасимволов регулярного выражения, символы, которые заменяются в строке, заменяются неправильно.
Я использовал следующее выражение:
string.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&")
Это работает по крайней мере в Chrome и прекрасно работает, например, в JSFiddle, однако в IE 11 (и, вероятно, в большинстве версий IE) это некорректно заменяет символ чем-то неправильным, например:
var string = "test (fake)";
string = string.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
приводит к:
test \\(fake\\)
вместо test \(fake\)
Первоначально я предполагал, что могу просто удалить одну из косых черт во втором аргументе для replace()
, однако это приводит к:
test (fake)
По сути, мне кажется, что я не могу экранировать эти символы, потому что я не знаю, как указать, что я хочу заменить его набуквально \(
вместо (
или \\(
.
Кто-нибудь сталкивался с этим раньше и есть решение, любая идея о том, как я могу обойти это или какой-то альтернативныйспособ избежать этих персонажей?Смена браузера, к сожалению, не вариант.
Вот справочник JSFiddle, чтобы показать, как он работает:
https://jsfiddle.net/k42uygm8/5/