使用动态 RegExp 获取 $1 捕获组
Get $1 capture group with dynamic RegExp
我很好奇是否有人知道我在这里做错了什么。我想在表达式中使用一个变量,但出于某种原因,当我尝试这样做时,它似乎无法使用 </code>.</p> 获取搜索词
<p>这 returns 正确:</p>
<pre><code>$('.content').html(function(_,i) {
return i.replace(/(cat)/gi, '<span class="highlight"></span>');
});
出于某种原因,这不是:
$('.content').html(function(_,i) {
var customVariable = 'cat';
var pattern = new RegExp(customVariable,'gi');
return i.replace(pattern, '<span class="highlight"></span>');
});
我对在 RegExp 中捕获组还很陌生,我找不到其他人有这个问题,所以我想我遗漏了一些非常简单的东西。
你忘了括号:
var pattern = new RegExp('(' + customVariable + ')','gi');
</code> 是对第 1 组的反向引用,而您没有。</p>
<p>实际上,您可以在 MDN 网站上的 JavaScript <code>replace
中找到 more about backreferences。确实,如果您不想匹配备选方案之前或之后的任何文本,您只是不需要设置捕获组,因为在使用正则表达式时,可以使用 [=13= 引用整个匹配文本] 模式(在您的情况下,您只需将 </code> 替换为 <code>$&
)。
$&
Inserts the matched substring.
您不需要定义子模式,因为您要突出显示整个匹配项。你可以简单地做:
var pattern = new RegExp(customVariable, 'gi');
i.replace(pattern, '<span class="highlight">$&</span>');
$&
指的是整个模式。
我很好奇是否有人知道我在这里做错了什么。我想在表达式中使用一个变量,但出于某种原因,当我尝试这样做时,它似乎无法使用 </code>.</p> 获取搜索词
<p>这 returns 正确:</p>
<pre><code>$('.content').html(function(_,i) {
return i.replace(/(cat)/gi, '<span class="highlight"></span>');
});
出于某种原因,这不是:
$('.content').html(function(_,i) {
var customVariable = 'cat';
var pattern = new RegExp(customVariable,'gi');
return i.replace(pattern, '<span class="highlight"></span>');
});
我对在 RegExp 中捕获组还很陌生,我找不到其他人有这个问题,所以我想我遗漏了一些非常简单的东西。
你忘了括号:
var pattern = new RegExp('(' + customVariable + ')','gi');
</code> 是对第 1 组的反向引用,而您没有。</p>
<p>实际上,您可以在 MDN 网站上的 JavaScript <code>replace
中找到 more about backreferences。确实,如果您不想匹配备选方案之前或之后的任何文本,您只是不需要设置捕获组,因为在使用正则表达式时,可以使用 [=13= 引用整个匹配文本] 模式(在您的情况下,您只需将 </code> 替换为 <code>$&
)。
$&
Inserts the matched substring.
您不需要定义子模式,因为您要突出显示整个匹配项。你可以简单地做:
var pattern = new RegExp(customVariable, 'gi');
i.replace(pattern, '<span class="highlight">$&</span>');
$&
指的是整个模式。