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, "$$$$")
}