2013-03-24 178 views
0

我有一個正則表達式從一個文本中抓取url的問題,並再次由函數修改替換字符串內的所有匹配。 下面的代碼是我想要做的虛擬示例。 是這樣的可能嗎?修改替換字符串內的正則表達式匹配

var exp = /\b((http:\/\/|https:\/\/)[\S]*)/g; 
text = text.replace(exp, "<a href=\"$1\" title=\""+parseUri("$1").host+"\"></a>"); 

回答

1

供應一個函數作爲第二個參數來.replace

var exp = /\bhttps?:\/\/[\S]*/g; 
text = text.replace(exp, function ($0) { 
    return '<a href="' + $0 + '" title="' + parseUri($0).host + '"></a>' 
}); 

(注意$0僅僅是一個變量名,您可以採用不同命名)。

檢查String.replace's documentation on MDN以瞭解替換函數參數的含義。第一個參數是整個正則表達式捕獲的文本。然後接下來的N個參數是由正則表達式中的N個捕獲組捕獲的文本。

我也冒昧改寫正則表達式。由於\b是一個斷言,因此不會消耗任何文本。

+0

謝謝,我一直在尋找 – Bernhard 2013-03-24 14:42:23