【问题标题】:str.replace does not replace the $1str.replace 不会替换 $1
【发布时间】:2017-01-04 19:32:39
【问题描述】:

我正在尝试制作一个小亮点功能。 我遇到的问题是,我没有将匹配项插入 $1。 我的功能看起来像

getMatch(str, search) {
    let result = str.replace(new RegExp(search, 'gi'), '<span class="match">$1</span>');
    return result;
}

如您所见,它应该包含匹配项。但事实并非如此。 这是我如何使用它的示例:

let string = 'My string with higlighting.';
let match = getMatch(string, 'With');

我的预期结果是:

My string &lt;span class="match"&gt;with&lt;/span&gt; highlighting.

但我只是得到:

My string &lt;span class="match"&gt;$1&lt;/span&gt; highlighting.

所以 $1 没有被匹配替换。

我该如何解决?

【问题讨论】:

  • 我想你想用span 包裹整场比赛,对吧?然后将$1 替换为$&amp;。
  • 我已经试过了。问题是我搜索不区分大小写但字符串是小写或大写。所以我不能用搜索字符串替换,我需要用匹配替换
  • 您的 'With' 没有捕获组,因此,$1 被解析为文字字符串。 $&amp; 将在替换中插入整个匹配值。
  • 或者,如果您还想使用匹配值填充match 属性,还可以在此处添加$&amp;:'&lt;span class="$&amp;"&gt;$&amp;&lt;/span&gt;'

标签: javascript regex str-replace


【解决方案1】:

您的 'With' 没有捕获组,因此,$1 被解析为文字字符串。

如果您想用span 包裹整个匹配,请将$1 替换为$&amp;。

getMatch(str, search) {
    let result = str.replace(new RegExp(search, 'gi'), '<span class="match">$&</span>');
    return result;
}

见MDN replace reference:

$&amp; 插入匹配的子字符串。

【讨论】:

    【解决方案2】:

    with 不是捕获组,你应该通过添加括号来转换它:

    let string = 'My string with higlighting.';
    let match = getMatch(string, '(With)');
    

    输出将是:

    My string <span class="match">with</span> higlighting.
    

    【讨论】:

      猜你喜欢
      • 2014-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-26
      • 2022-01-11
      • 2016-04-26
      • 1970-01-01
      相关资源
      最近更新 更多