Нечетная строка JavasScript заменяет поведение $&

следующий код:

var x = 'foo';
console.log(x.replace(x, "$&"));​

вывод 'foo', как показано здесь:http://jsfiddle.net/mPKEx/

почему это не

'$&"?

я заменяю все x на"$&", который является просто старой строкой плана, поэтому почему строка.замените выполнение какой-то сумасшедшей замены, когда 2-й arg функции не должен ничего делать, кроме замены...

2 ответов


$& - Это специальная ссылка в строке замены Javascript. Это точки в соответствующей строке.

$$ - Inserts a "$"
$& - Refers to the entire text of the current pattern match. 
$` - Refers to the text to the left of the current pattern match. 
$' - Refers to the text to the right of the current pattern match.
$n or $nn - Where n or nn are decimal digits, inserts the nth parenthesized
            submatch string, provided the first argument was a RegExp object.

(ссылка)


в вашем случае:

var x = 'foo';
console.log(x.replace(x, function() {return '\$&'}));

см. различия:http://jsfiddle.net/mPKEx/10/

вы можете указываете функцию в качестве второго параметра. Вышеупомянутые специальные модели замены ($$, $&, $`, $', $n или $nn) do не применить в этом случае.