开发者

as3 - detect urls in dynamic text and make them links

开发者 https://www.devze.com 2023-02-15 11:08 出处:网络
Anyone know of any good classes or functions that will do this? I\'ve found some regexes but what I need is to pass the string to a method and have it return the same string, but with urls turned blue

Anyone know of any good classes or functions that will do this? I've found some regexes but what I need is to pass the string to a method and have it return the same string, but with urls turned blue and turned into hyperlinks. Seems like a fairly common task, but I can't find anything.

EDIT - the following works for any link starting with 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=\开发者_JAVA百科"$&\">$&</a></font>");
field.htmlText = str;

But it doesn't work for links that start with "www", because the href ends up looking like this:

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

Would love to know how to fix that.


I'm wary of making the existing regular expression/ replacement call any more complicated. With that in mind the most straightforward way of doing this is probably to write a second regular expression to correct any bad tags in the output from the first. I'd also add a 'g' to the end of your main regular expression so that it captures multiple URLs in the text

So, your main regular expression would now look like this:

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

Your secondary regular expression will look something like this:

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

it should capture any links that don't start with "http:"

You then run both these expressions over your input string replacing as necessary:

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");
0

精彩评论

暂无评论...
验证码 换一张
取 消