使用替换$ 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);
});
答
由于/\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'。 –
如果您需要使用整个匹配,请用'$&'替换'$ 1'。 –
工作正常!谢谢 –
您的正则表达式中没有任何'$ 1'可以引用的捕获组。 – Bergi