Javascript replace()和$ 1问题

时间:2012-11-13 21:14:17

标签: javascript regex

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

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

这是我使用的代码,它确实找到我正在寻找的东西,但它实际上做的是产生一个内部$ 1的标签。我期望它做的是将它找到的字符串放入强标签。我在这做错了什么?

3 个答案:

答案 0 :(得分:8)

您需要先捕捉比赛,然后才能使用它。使用括号:

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

Ridiculously over-simplified JS Fiddle demo

答案 1 :(得分:3)

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

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

我还建议使用jQuery Highlight Plugin - 您可以调整它以使用正则表达式,代码非常简单。

答案 2 :(得分:1)

将要捕获的组包裹在括号中:

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