2011-03-09 52 views
2

任何人都知道會做到這一點的任何好的類或函數?我發現了一些正則表達式,但我需要的是將字符串傳遞給一個方法,並讓它返回相同的字符串,但URL變成藍色並變成超鏈接。看起來像一個相當普遍的任務,但我找不到任何東西。as3 - 在動態文本中檢測URL並將它們鏈接

編輯 - 以下適用於任何鏈接以http:

var myPattern:RegExp = /\b((?:https?:\/\/|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»「」‘’]))/i;    
var str = text.replace(myPattern, "<font color='#04717D'><a target='_blank' href=\"$&\">$&</a></font>"); 
field.htmlText = str; 

但它並不適用於以「www」的啓動環節的工作,因爲在href最終看起來像這樣:

<a href="www.google.com">www.google.com</a> 

想知道如何解決這個問題。

+0

你是什麼意思的「動態文本」嗎? – Cameron 2011-03-09 00:22:07

+0

我的意思是來自外部來源的文本,如XML。我需要解析它並尋找像「www.google.com」這樣的超鏈接 – sol 2011-03-09 00:31:41

回答

1

我很擔心現有的正則表達式/替換調用會更加複雜。考慮到這一點,最直接的方法是編寫第二個正則表達式來糾正第一個輸出中的任何不良標記。我也想補充一個「G」到你的主正則表達式的末尾,以便它捕獲文本多個URL

所以,你的主正則表達式現在應該是這樣的:

var mainPattern:RegExp = /\b((?:https?:\/\/|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»「」‘’]))/ig; 

你二次正則表達式將是這個樣子:

var secondaryPattern:RegExp = /\"www/g; 

應該捕捉不啓動任何鏈接的「http:」

然後運行這兩個表達結束了您輸入的字符串替換爲必要的:

var someText:String = "This is some text with a link in it www.stackoverflow.com and also another link http://www.stackoverflow.com/questions/5239966/as3-detect-urls-in-dynamic-text-and-make-them-links"; 
someText = someText.replace(mainPattern, "<a target='_blank' href=\"$&\">$&</a>"); 
someText = someText.replace(secondaryPattern, "\"http://www"); 
相關問題