我有一種情況,其中包含URL鏈接的文本。的鏈接是在2種形式如何在javascript中替換不在href標記中的URL
- www.stackoverflow.com
- < A HREF = 「http://www.stackoverflow.com」 >堆棧超過流< /一個>
我我試圖創建一個簡單的函數,它使用正則表達式,它將包含帶有HREF標記的所有類型爲的鏈接,但其他鏈接已包裝爲單獨。
我有這樣的事情,但不成功。
function replaceURLWithHTMLLinks(text) {
var exp = /(<(\s*)a(\s)*href.*>.*<\/(\s)*a(\s*)>)/ig;
var matches = exp.exec(text);
for(var i=0; i < matches.length; i++) {
var line = matches[i];
if(!exp.test(line)) {
var exp2 = /(\b(?:(?:(?:https?|ftp|file):\/\/|www\.|ftp\.)[-A-Z0-9+&@#\/%?=~_|$!:,.;]*[-A-Z0-9+&@#\/%=~_|$])|」(?:(?:https?|ftp|file):\/\/|www\.|ftp\.)[^"\r\n]+」?|’(?:(?:https?|ftp|file):\/\/|www\.|ftp\.)[^'\r\n]+’?)/ig;
text = text.replace("http://","");
text = text.replace(exp2, "<a href=http://$1>$1</a>");
}
}
return text;
}
它不工作,但希望有人能解決這個問題:)
編輯
是固定它的解決方案,具有@MikeM答案
function replaceLinksSO(text) {
rex = /(<a href=")?(?:https?:\/\/)?(?:(?:www)[-A-Za-z0-9+&@#\/%?=~_|$!:,.;]+\.)+[-A-Za-z0-9+&@#\/%?=~_|$!:,.;]+/ig;
return text.replace(rex, function ($0, $1) {
if(/^https?:\/\/.+/i.test($0)) {
return $1 ? $0: '<a href="'+$0+'">'+$0+'</a>';
}
else {
return $1 ? $0: '<a href="http://'+$0+'">'+$0+'</a>';
}
});
}
可能重複的[如何用鏈接替換普通URL?](http://stackoverflow.com/questions/37684/how-to-replace-plain-urls-with-links) – Dve 2013-02-21 09:52:17
@Dve不是真的重複。我試圖用鏈接替換普通的URL,只是在普通的URL沒有用href標籤包裝的情況下。因爲我在HTML文檔上這樣做。另一個正則表達式實際上完全失敗了我的測試用例。 – 2013-02-22 10:08:31