2013-04-16 81 views
0

我發現這個JS上,這樣看起來會檢測包括經常鏈接和Twitter和#哈希標籤工作@使用者名稱這裏很大腳本:的Javascript正則表達式中刪除HTTP://和https://從文本

function processTweetLinks(text) { 
    text = text.replace(); 
    var exp = /(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/i; 
    text = text.replace(exp, "<a href='$1' target='_blank'>$1</a>"); 
    exp = /(^|\s)#(\w+)/g; 
    text = text.replace(exp, "$1<a href='http://search.twitter.com/search?q=%23$2' target='_blank'>#$2</a>"); 
    exp = /(^|\s)@(\w+)/g; 
    text = text.replace(exp, "$1<a href='http://www.twitter.com/$2' target='_blank'>@$2</a>"); 
    console.log(text); 
} 

但是......第一個表達式不太適合我的需求......當它得到類似http://google.com的東西時,它輸出<a href='http://google.com' target='_blank'>http://google.com</a>。我希望它輸出<a href='http://google.com' target='_blank'>google.com</a>而不是 - 基本上從錨標記中刪除http://https://。我不知道正則表達式 - 爲了輸出這個函數,函數需要看起來像什麼?

更新:我得到的功能與@ BrunoFinelli的答案固定,這很好,但我不知道如何使它修復給定的字符串/消息中的多個鏈接。現在它只在每次調用函數時修復一個...如果任何人都可以調整函數來解決這個問題,那將非常感謝!謝謝!如果第一個正則表達式(有問題的)從錨標籤中刪除www.也會很好。但實際上,我只需要知道如何通過可能有多個鏈接/提及/標籤的推文重複此操作。謝謝!

回答

3

試試這個:

function processTweetLinks(text) { 
     text = text.replace(); 
     var exp = /(\b(https?|ftp|file):\/\/)([-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/i; 
     text = text.replace(exp, "<a href='$1$3' target='_blank'>$3</a>"); 
     exp = /(^|\s)#(\w+)/g; 
     text = text.replace(exp, "$1<a href='http://search.twitter.com/search?q=%23$2' target='_blank'>#$2</a>"); 
     exp = /(^|\s)@(\w+)/g; 
     text = text.replace(exp, "$1<a href='http://www.twitter.com/$2' target='_blank'>@$2</a>"); 
     console.log(text); 
    } 
+0

剛纔試了,它工作正常...'processTweetLinks('HTTP ://google.com')'產生'google.com' –

+0

是的,它是完美的!只要我的新手眼睛可以看到它沒有錯!謝謝@BrunoFinelli!我所做的唯一小小的監督就是'www.',那麼也可以很好地將其刪除? – tylerl

+0

我沒有意識到它只在每次運行時才被應用到一個鏈接......您能否修改您的答案,以便它可以修復給定字符串中的多個鏈接?謝謝! – tylerl

0

您需要捕獲另一個捕獲組中URL的第二部分,並在錨標記內引用該組。

var exp = /(\b(https?|ftp|file):\/\/([-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|]))/i; 
text = text.replace(exp, "<a href='$1' target='_blank'>$3</a>"); 

你可以找出如何通過計算,當左括號在聲明中發生參照組。在上面的例子中,你希望href等於整個語句(第一個左括號),並且你希望內部html匹配第三個左括號。

這也將工作,如$&插入匹配字符串的全部:

var exp = /\b(https?|ftp|file):\/\/([-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/i; 
text = text.replace(exp, "<a href='$&' target='_blank'>$2</a>"); 
相關問題