Как связать текст с помощью ActionScript 3 - PullRequest
0 голосов
/ 22 июля 2009

У меня есть текст, который я хочу связать (определить URL-адреса и преобразовать их в HTML-ссылки). Текст может быть многострочным и может содержать несколько URL, как в примере ниже.

Мой текущий код ActionScript выглядит так

<mx:Script>
    <![CDATA[

    import mx.controls.Alert;
    import mx.rpc.events.FaultEvent;      
    import mx.rpc.events.ResultEvent;


    private function init():void {
        var str:String = "@stack the website for google is http://www.google.com and gmail is http://gmail.com";

        //Alert.show(linkify(str),"Error");
        txtStatus.htmlText = linkify(str);
    }

     private function linkify(texty:String):String {
        //return texty.replace("/[A-Za-z]+:\/\/[A-Za-z0-9-_]+\.[A-Za-z0-9-_:%&\?\/.=]+/g",function(m):String { return m.linkify(m);});
        //return texty.replace(/[A-Za-z]+:\/\/[A-Za-z0-9-_]+\.[A-Za-z0-9-_:%&\?\/.=]+/g, function(m):String {return m.linkify(m);}).replace(/(^|[^\w])(@[\d\w\-]+)/g, function(m2):String{return '@<a href="http://twitter.com/' + m2.substr(1) + '">' + m2.substr(1) + '</a>'; });
        var pattern:RegExp = /[A-Za-z]+:\/\/[A-Za-z0-9-_]+\.[A-Za-z0-9-_:%&\?\/.=]+/g;
        var match:String = pattern.exec(texty);
        return texty.replace(pattern,'<a href="' + match + '">' + 
        match + '</a>');
    }

    ]]>
</mx:Script>

Проблема с приведенным выше сценарием заключается в том, что он распознает первое совпадение и использует его для всех. И как мне это сделать для @?

Любая помощь высоко ценится.

1 Ответ

1 голос
/ 22 июля 2009

уууу ... почему все используют регулярные выражения в наши дни, чтобы выполнить супер простые задачи? Кроме того, вы забыли, что «+» является допустимым символом для URL-адресов, в качестве замены пробела, и даже очень много других символов могут использоваться, поэтому ваш шаблон даже не будет соответствовать соответствующим образом .. .

ну, в любом случае, взгляните на метасимволы регулярных выражений AS3 ... это значительно улучшит читабельность вашего выражения и станет намного более надежным ...

Я бы пошел с чем-то вроде этого, на самом деле:

var r:RegExp = /(?:http|https):\/\/\S*/g;
trace(str.replace(r, function (s:String,...rest):String { 
    return '<a href="' + s + '">' + s + '</a>' 
} ));

но фактической точкой был флаг global ...

тогда удачи ...:)

Greetz

back2dos

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...