使用替换$ 1将字符串“$ 1”解释为字符串

问题描述:

我使用以下代码尝试使用span标记来包装3个字母的月份字符串,如“Nov”或“Sep”。但是,写入DOM的文字实际上是<span class="list-view-month">$1</span>,其中$ 1被字面解释,而不是作为对正则表达式匹配的反向引用。

我在这里做错了什么?

谢谢!

// Date wrap 
$('.list-view .dates').each(function(){ 
    var $me = $(this); 
    var oldHtml = $me.html(); 
    var newHtml = oldHtml.replace(/\b[A-Za-z]{3}\b/,'<span class="list-view-month">$1</span>'); 
    $me.html(newHtml); 
}); 
+1

如果您需要使用整个匹配,请用'$&'替换'$ 1'。 –

+0

工作正常!谢谢 –

+1

您的正则表达式中没有任何'$ 1'可以引用的捕获组。 – Bergi

由于/\b[A-Za-z]{3}\b/正则表达式没有转义圆括号,你需要引用replace方法里面的整场比赛,你只需要使用反向引用$&

var newHtml = oldHtml.replace(/\b[A-Za-z]{3}\b/,'<span class="list-view-month">$&</span>'); 
                       ^^ 

String#replace documentation

$&    插入匹配的子字符串。

+0

顺便说一句,你可以通过使用强制区分大小写的匹配的'/ i'修饰符缩短正则表达式:'/ \ b [A-Z] {3} \ b/i'。 –