2015-11-02 137 views
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

回答

3

由於/\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'。 –