2012-11-13 66 views
3

我正在嘗試創建一個腳本,用於在文本中搜索模式並在找到的字符串周圍包裝標籤。

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

這是我使用的代碼,它並找到我尋找,但其實際作用是產生與在$ 1標籤。我希望它能做的就是將它找到的字符串放入強標籤中。我在這裏做錯了什麼?

回答

6

您需要捕獲匹配,然後才能使用它。使用圓括號:

$(".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

+0

非常感謝,我花了好幾個小時把頭撞向鍵盤。 – Nick

+0

是的,當我學習正則表達式時,也花了我一段時間。我花了更長的時間才意識到,儘管人們說,它真的是*,一個黑色和困難的魔法...... –

1

裹你想在括號來捕捉組:

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

另一種選擇是使用$&,它代表了整場比賽(也$0其他口味):

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

我'd也建議jQuery Highlight Plugin - 您可能可以調整它以使用正則表達式,代碼非常簡單。