str.replace不会取代$ 1

时间:2017-01-04 11:01:00

标签: javascript regex str-replace

我试图做一点突出显示功能。 我遇到的问题是,我没有将匹配项插入$ 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 <span class="match">with</span> highlighting.

但我得到:

My string <span class="match">$1</span> highlighting.

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

我该如何解决?

2 个答案:

答案 0 :(得分:2)

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

如果您想将整个匹配项与span打包在一起,请将$1替换为$&

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

请参阅MDN replace reference

  

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

答案 1 :(得分:1)

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

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

输出将是:

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