2011-03-09 51 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");