as3 - 检测动态文本中的URL并使其成为链接

时间:2011-03-09 00:14:59

标签: actionscript-3 url string hyperlink

任何人都知道有任何好的课程或功能会这样做吗?我发现了一些正则表达式,但我需要的是将字符串传递给方法并让它返回相同的字符串,但是网址变为蓝色并变成超链接。似乎是一项相当普遍的任务,但我找不到任何东西。

编辑 - 以下适用于以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>

很想知道如何解决这个问题。

1 个答案:

答案 0 :(得分: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");