JavaScript метод replace() знаки доллара

У меня есть строка как aman/gupta и я хочу заменить его на aman$$gupta и для этого я использую JavaScript replace метод следующим образом:

a = "aman/gupta"
a = a.replace("/", "$")
// 'aman$gupta'

a = "aman/gupta"
a = a.replace("/", "$$")
// 'aman$gupta'

a = "aman/gupta"
a = a.replace("/", "$$$")
// 'aman$$gupta'

Почему 1-й и 2-й случай идентичны, и я получаю ожидаемый результат при использовании $$$ вместо $$?

6 ответов

Решение

Это потому что $$ вставляет "$",

Итак, вам нужно использовать:

a = "aman/gupta";
a = a.replace("/", "$$$$"); // "aman$$gupta"

Смотрите следующие специальные шаблоны:

Pattern   Inserts
$$        Inserts a "$".
$&        Inserts the matched substring.
$`        Inserts the portion of the string that precedes the matched substring.
$'        Inserts the portion of the string that follows the matched substring.
$n        Where n is a non-negative integer lesser than 100, inserts the nth
            parenthesized submatch string, provided the first argument was a
            RegExp object.

Чтобы избежать необходимости экранировать специальные символы, вы можете использовать анонимную функцию в качестве заменителя

a = "aman/gupta";
a = a.replace("/", function() {return "$$"});
console.log(a); // "aman$$gupta"

String.prototype.replace() документация

Указание функции как параметра

Вы можете указать функцию в качестве второго параметра. В этом случае функция будет вызвана после того, как совпадение будет выполнено. Результат функции (возвращаемое значение) будет использоваться как строка замены. (Примечание: вышеупомянутые специальные шаблоны замены не применяются в этом случае.) Обратите внимание, что функция будет вызываться несколько раз для каждого полного совпадения, которое будет заменено, если регулярное выражение в первом параметре является глобальным.

Также вы можете использовать split а также join для лучшей производительности и $ не специально для этих функций.

var a = "aman/gupta"
a = a.split('/').join('$$')
alert(a); // "aman$$gupta"

replace Метод обеспечивает замену шаблонов, которые начинаются со знака доллара. Один из них является $$ который вставляет один $, Один знак доллара в строке замены приведет к буквальному.

Так что если вы хотите чистые буквенные знаки доллара, используйте $$ Шаблоны замены соответственно:

console.log('aman/gupta'.replace('/','$$')); // aman$gupta
console.log('aman/gupta'.replace('/','$$$$')); // aman$$gupta
console.log('aman/gupta'.replace('/','$$$$$$')); // aman$$$gupta

Используйте код ниже, это работает для меня.

var dollar = "$$$$";
console.log('abhishe/kadam'.replace('/', dollar.replace(new RegExp('\\$', 'g'), '$$$')));

В регулярном выражении замена с группами, если замена является переменной, необходимо экранировать знак доллара. Иначе будут баги.

      function escapeDollarSign(str) {
return str.replace(/\$/g, "$$$$")
}
Другие вопросы по тегам