Почему "ABC'.replace" ( "B", "$`" ) дает AAC

Почему этот код печатает AAC вместо ожидаемого A$`C?

console.log('ABC'.replace('B', '$`'));

== >

AAC

И как заставить его дать ожидаемый результат?

Ответ 1

console.log('ABC'.replace('B', "$$`"));

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace

Чтобы вставить $, вы должны передать $$, потому что $`:

Вставляет часть строки, которая предшествует согласованной подстроке.

Другие шаблоны:

enter image description here

Скрипка:

http://jsfiddle.net/8kou1z3q/

Кроме того, на ссылку ссылки, которую я опубликовал выше, есть еще больше. Если у вас все еще есть какие-либо проблемы или сомнения, вы, вероятно, можете найти там ответ, снимок экрана был взят из ссылки, размещенной в начале ответа.

EDIT:

На мой взгляд, стоит сказать, что любой шаблон, который не соответствует указанному выше , не должен быть экранирован, следовательно $ doesn ' t нужно сбежать, такая же история происходит с $AAA.

В комментариях выше пользователь спросил, почему вам нужно "убежать" от $с другим $: несмотря на то, что я не совсем уверен в этом, я думаю, что также стоит отметить, из того, что мы сказали выше, что любой недопустимый шаблон не будет интерпретироваться, поэтому я думаю (и подозреваю, на данный момент), что $$ - очень частный случай, поскольку он охватывает случаи, когда вам нужно заменить матч на знак доллара, за которым следует символ "с блокировкой шаблона", например, галочка (`) (или действительно как и как другая).

В любом другом случае знак доллара не должен быть экранирован, поэтому, вероятно, имеет смысл, что они решили создать такое конкретное правило, иначе вам понадобилось бы избегайте $else else (и я думаю, что это могло повлиять на любой строковый объект, потому что это означало бы, что даже в var a = "hello, $ hey this one is a dollar"; вам нужно было бы избежать $).

Если вы все еще заинтересованы и хотите прочитать больше, проверьте также:

http://www.regular-expressions.info/javascript.html#replace

Скрипт с большим количеством случаев:

http://jsfiddle.net/8kou1z3q/3/

Ответ 2

В знаке replacement знак доллара $ имеет особое значение и используется, когда форма данных соответствует совпадению в replacement.

MDN: String.prototype.replace(): Указание строки как параметра

$$ Вставляет "$".
 $ `Вставляет часть строки, которая предшествует согласованной подстроке.

Пока $ не приводит к комбинации, которая имеет особое значение, тогда она будет обрабатываться как обычный char. Но вы все равно должны всегда записывать его как $$ в замену, потому что иначе он может не сработать в будущем, если будет добавлена ​​новая комбинация $x.