使用动态 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>');

$&指的是整个模式。