actionscript查找并将文本转换为url

时间:2010-04-30 18:26:55

标签: regex actionscript-3

  

可能重复:
  How do I linkify text using ActionScript 3

我有这个脚本抓取一个Twitter提要并显示在一个小小部件中。我想要做的是查看网址的文本并将该网址转换为链接。

    public class Main extends MovieClip
{
    private var twitterXML:XML; // This holds the xml data

    public function Main()
    {
        // This is Untold Entertainment's Twitter id.  Did you grab yours?
        var myTwitterID= "username"; 
        // Fire the loadTwitterXML method, passing it the url to your Twitter info:
        loadTwitterXML("http://twitter.com/statuses/user_timeline/" + myTwitterID + ".xml");
    }

    private function loadTwitterXML(URL:String):void
    {
        var urlLoader:URLLoader = new URLLoader();
        // When all the junk has been pulled in from the url, we'll fire finishedLoadingXML:
        urlLoader.addEventListener(Event.COMPLETE, finishLoadingXML);
        urlLoader.load(new URLRequest(URL));            
    }

    private function finishLoadingXML(e:Event = null):void
    {
        // All the junk has been pulled in from the xml!  Hooray!
        // Remove the eventListener as a bit of housecleaning:
        e.target.removeEventListener(Event.COMPLETE, finishLoadingXML);

        // Populate the xml object with the xml data:
        twitterXML = new XML(e.target.data);
        showTwitterStatus();
    }

    private function addTextToField(text:String,field:TextField):void{
       /*Regular expressions for replacement, g: replace all, i: no lower/upper case difference
       Finds all strings starting with "http://", followed by any number of characters
       niether space nor new line.*/
       var reg:RegExp=/(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig;
       //Replaces Note: "$&" stands for the replaced string.
       text.replace(reg,"<a href=\"$&\">$&</a>");
       field.htmlText=text;
    }

    private function showTwitterStatus():void
    {
        // Uncomment this line if you want to see all the fun stuff Twitter sends you:
        //trace(twitterXML);

        // Prep the text field to hold our latest Twitter update:
        twitter_txt.wordWrap = true;
        twitter_txt.autoSize = TextFieldAutoSize.LEFT;

        // Populate the text field with the first element in the status.text nodes:
        addTextToField(twitterXML.status.text[0], twitter_txt);
    }

1 个答案:

答案 0 :(得分:0)

如果这个

/(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig

是您将文本转换为网址的正则表达式,而不是我的一些评论。

首先,几乎所有chacacter类中的字符都是按字面解析的。

所以,这里

[-A-Z0-9+&@#\/%?=~_|!:,.;]

你说要搜索任何这些字符(/除外)。

url搜索的简单正则表达式与此

类似
/\s((https?|ftp|file):\/\/)?([-a-z0-9_.:])+(\?[-a-z0-9%_?&.])?(\s+|$)/ig

我不确定,如果它会正确处理网址边框,但\b符号可以是一个点,所以我认为\s(空格或换行符)会更合适。

我不确定结束(在动作脚本中是否允许在regexp结束时使用字符串结尾符号?)

当然,你必须调整它以适合你的数据。