当我使用正则表达式时,我偶然发现了$&
。如果我使用$1
,我会得到与$&
相同的结果。 $&
,的特殊内容以及记录在哪里?
当我搜索“正则表达式+ $&”时在duckduckgo或谷歌我找不到任何相关的匹配。
在下面的示例中,可以使用$1
或$&
。有什么关于$&和它为什么存在?
使用示例
查看fiddle<div id="quotes">
<ul>
<li>Поехали!
<ul>
<li><b>Let's go!</b></li>
<li>Variant translations: <b>Let's ride!</b></li>
<li><b>Let's drive!</b></li>
<li><b>Off we go!</b></li>
</ul>
</li>
</ul>
<ul>
<li><i>Облетев Землю в корабле-спутнике, я увидел, как прекрасна наша планета. Люди, будем хранить и преумножать эту красоту, а не разрушать её!</i>
<ul>
<li><b>Orbiting Earth in the spaceship, I saw how beautiful our planet is. People, let us preserve and increase this beauty, not destroy it!</b></li>
</ul>
</li>
</ul>
</div>
<script>
var quotes = document.getElementById("quotes"),
html = quotes.innerHTML,
match = /(let)/gi;
// $1 gives same result
quotes.innerHTML = html.replace(match, "<mark>$&</mark>");
</script>
答案 0 :(得分:5)
$&
和$1
不一样。
您获得的值相同,因为您将整个模式包含在捕获组中。
$&
是对整个匹配的反向引用,而$1
是对捕获组1捕获的子匹配的反向引用。
请参阅MDN String#replace()
reference:
$&
插入匹配的子字符串。
$n
或$nn
其中n
或nn
为十进制数字,请插入n
带括号的子匹配字符串,前提是第一个参数为RegExp
对象
有关replacement backreferences can be found at regular-expressions.info的更多详情。
答案 1 :(得分:3)
$&
返回整个匹配的字符串,$1
,$2
,...返回捕获的匹配项。我知道这听起来很奇怪,但请参阅perlre for more info。
请考虑以下事项:
'abc abc'.replace(/(a)(b)./g, '$1'); // a a
'abc abc'.replace(/(a)(b)./g, '$2'); // b b
'abc abc'.replace(/(a)(b)./g, '$&'); // abc abc
答案 2 :(得分:2)
$&
是&#34;替代品&#34; 完全匹配(所有匹配的文本)(要替换的内容的占位符)。 $1
是&#34;替代品&#34;对于第一个捕获组。
所以:
var str = "test".replace(/s(t)/, "$&$1");
给我们
testt
因为$&
为st
而$1
为t
。