我在使用正则表达式时偶然发现了$&
。如果我使用$1
,我会得到与$&
相同的结果。$&
有什么特别之处,在哪里有文档?
当我在duckduckgo或google上搜索“正则表达式+$&”时,我找不到任何相关的匹配项。
在下面的例子中,可以使用$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>
3条答案
按热度按时间5tmbdcev1#
$&
和$1
不相同。因为您将整个模式包含在一个捕获组中,所以会得到相同的值。
$&
是对整个匹配的反向引用,而$1
是对使用捕获组1捕获的子匹配的反向引用。参见MDN
String#replace()
reference:$&
插入匹配的子字符串。$n
或$nn
其中n
或nn
是十进制数字,如果第一个参数是RegExp
对象,则插入第n
个带括号的子匹配字符串。关于replacement backreferences can be found at regular-expressions.info的更多详细信息。
x7rlezfr2#
$&
是 * 完全匹配 *(所有匹配文本)的"替换"(要替换内容的占位符)。$1
是第一个捕获组的"替换"。因此:
给了我们
因为
$&
是st
并且$1
是t
。pkwftd7m3#
$&
返回整个匹配字符串,而$1
、$2
、...返回捕获的匹配项。请考虑以下几点: