Как избежать замены символов JavaScript в RegEx?
Рассмотрим код ниже:
var my_string = "aicId";
var my_pattern = "i";
var my_regex = new RegExp(my_pattern,"gi");
var my_result = my_string.replace(my_regex,"x$&y");
alert (my_result);
Это вернуло бы:
axiycxIyd
А что если я захочу вернуть это:
ax$&ycx$&yd
Что мне нужно сделать?
Я пытался сбежать от них так:
var my_result = my_string.replace(my_regex,"x\$\&y");
или это:
var my_result = my_string.replace(my_regex,"x\\$&y");
или это:
var my_result = my_string.replace(my_regex,"x$&y");
или это:
var dollar = '$';
var amper = '&';
var my_result = my_string.replace(my_regex,"x" + dollar.charCodeAt(0) + amper.charCodeAt(0) + "y");
Что еще я могу попробовать?
2 ответа
Для вставки $
тебе нужно $$
, в твоем случае $&
это специальный шаблон замены, если вы сбежите первым $
от $$
это будет работать.
var my_string = "aicId";
var my_pattern = "i";
var my_regex = new RegExp(my_pattern, "gi");
var my_result = my_string.replace(my_regex, "x$$&y");
document.write('<pre>' + JSON.stringify(my_result, 0, 2) + '</pre>');
Или вы можете использовать функцию в качестве второго параметра, не экранируя ничего:
От MDN:
Вы можете указать функцию в качестве второго параметра. В этом случае функция будет вызвана после того, как будет выполнено совпадение. Результат функции (возвращаемое значение) будет использоваться в качестве строки замены.
var my_string = "aicId";
var my_pattern = "i";
var my_regex = new RegExp(my_pattern, "gi");
var my_result = my_string.replace(my_regex, function() {
return "x$&y";
});
document.write('<pre>' + JSON.stringify(my_result, 0, 2) + '</pre>');
Если вы хотите вернуть "ax$&ycx$&yd", это должно сработать:
var my_result = my_string.replace(my_regex,"x$$\&y");
Потому что в первой части регулярного выражения "$" нужно экранировать, потому что это специальный символ регулярного выражения, обозначающий конец строки.
Вторая часть регулярного выражения рассматривается как "обычная" строка, где "$" не имеет особого значения.