2013-07-27 89 views
1

我想在javascript中創建一個自動鏈接功能,當用戶鍵入(ContentEditable div)時,會自動將url轉換爲鏈接。JavaScript自動鏈接的網址,但避免遞歸

我用這個表達式:

var text = 'Some text containing URLs'; 
var exp = /(\b(http):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig; 
var newtext = text.replace(exp,"<a href='$1'>$1</a>"); 

上面的代碼工作正常,但由於代碼獲取每次稱爲用戶類型,遞歸發生:

<a href='<a href='<a href=' etc. 

我怎樣才能避免這種情況發生時,仍然有腳本更新文本作爲用戶類型?

所以,問題是(感謝@putvande):我如何檢查,如果網址不已經包含:

<a href='... 

(我不是正則表達式真的很方便)

+0

你需要用你的正則表達式來檢查是否已經有''標籤在你的代碼。 – putvande

+1

我發現了一個非正則表達式解決方案來解決我的問題,在正則表達式函數之前,我去掉了所有的標籤。看到我的小提琴jsfiddle.net/gerbenzomp/UJMeR/3可能不是最優雅的解決方案,所以我仍然對僅有正則表達式的解決方案非常感興趣。 – Gerben

+0

Hay @Gerben你是否解決了這個問題?我需要一個解決方案即時通訊工作 – dhee

回答

0

你可以只匹配那些前綴不是>'的URL模式。雖然這可能不是100%萬無一失,但它應該足以讓你開始。

function urlify(text) { 
    var exp = /^\>(\b(http):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig; 
    return text.replace(exp,"<a href='$1'>$1</a>"); 
} 

在調用它:

urlify('Some text http://example.com containing URLs'); 

回報"Some text <a href='http://example.com'>http://example.com</a> containing URLs"

urlify("Some text <a href='http://example.com'>http://example.com</a> containing URLs"); 

回報"Some text <a href='http://example.com'>http://example.com</a> containing URLs"

+0

我試過你的解決方案,但由於某種原因,它不會做任何事情 – Gerben

+1

@Gerben函數參數使用「測試」,但函數使用「文本」作爲變量。我已提交修改以糾正此問題。 –

+1

@ S.Walker - 感謝您的編輯。 :) – techfoobar