Как избежать замены символов 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");

Потому что в первой части регулярного выражения "$" нужно экранировать, потому что это специальный символ регулярного выражения, обозначающий конец строки.

Вторая часть регулярного выражения рассматривается как "обычная" строка, где "$" не имеет особого значения.

Отсюда

Другие вопросы по тегам