Javascript replace() and $1 issue



我正在尝试创建一个脚本,该脚本在文本中搜索模式,并在找到的字符串周围包裹标签。

$(".shop_attributes td").each(function () {
    $(this).html(function(i, html) {
        return html.replace(/E[0-9]{3,4}/g, "<strong>$1</strong>");
    });
});

这是我使用的代码,它确实找到了我正在寻找的内容,但它实际上做的是生成一个内部带有 1 美元的标签。我希望它做的是将它找到的字符串放入强标签中。 我在这里做错了什么?

您需要先捕获匹配项,然后才能使用它。使用括号:

$(".shop_attributes td").each(function () {
    $(this).html(function(i, html) {
        return html.replace(/(E[0-9]{3,4})/g, "<strong>$1</strong>");
    });
});

可笑的过度简化的JS小提琴演示。

另一种选择是使用 $& ,它代表整个匹配(在其他风格中也$0):

html.replace(/E[0-9]{3,4}/g, "<strong>$&</strong>");

我还推荐jQuery突出显示插件 - 您也许可以对其进行调整以使用正则表达式,代码非常简单。

要捕获的组括在括号中:

/(E[0-9]{3,4})/g

最新更新