2016-12-25 210 views
0

我試圖包圍日期在middleRsults與標籤:的Javascript:包相匹配的正則表達式與標籤

var middleRsults = "95.00  04/07/15 aaaa 10/02/15 "; 
var regex =/\d{2}\/\d{2}\/\d{2}/g; 
var x= middleRsults.replace(regex,"<b>$1</b>") 

我想什麼:

95.00  <b>04/07/15</b> aaaa <b>10/02/15</b> 

相反,我居然得到:

95.00  <b>$1</b> aaaa <b>$1</b> 

我搜索了很多,但無法弄清楚爲什麼這種情況發生在我正在使用的這個特定的正則表達式中。

+0

閱讀[文檔](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace#Specifying_a_string_as_a_parameter)來仔細瞭解'$ 1'的含義,以及可以使用的其他特殊替換模式。 – 2016-12-25 16:17:39

回答

3

根據您當前的正則表達式,你可以簡單地使用匹配的子$&

var middleRsults = '95.00  04/07/15 aaaa 10/02/15 ', 
 
    regex = /\d{2}\/\d{2}\/\d{2}/g, 
 
    x = middleRsults.replace(regex, '<b>$&</b>'); 
 

 
console.log(x);

或者,對於更爲複雜的情況,你可以指定一個函數作爲參數,其中match是matche d子(對應於上面& $):

var middleRsults = '95.00  04/07/15 aaaa 10/02/15 ', 
 
    regex = /\d{2}\/\d{2}\/\d{2}/g, 
 
    x = middleRsults.replace(regex, match => `<b>${match}</b>`); 
 

 
console.log(x);

1

你需要一個捕獲組使用$n更換:

var regex =/(\d{2}\/\d{2}\/\d{2})/g; 

括號形成這樣的組。這些組在模式中從左到右編號。

1

當您意識到這一點時,您可能會面對面地掌握,但是您的正則表達式不包含用於引用$ 1的捕獲組。

這樣應該可以解決這個問題:

var regex = /(\d{2}\/\d{2}\/\d{2})/g;