2016-12-25 211 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;