2009-07-22 9 views
0

リンクしたいテキストがあります(URLを識別してHTMLリンクに変換します)。テキストは複数行にすることができ、以下の例のような複数のURLを含むことができます。ActionScript 3を使用してテキストをリンクするには

私の現在の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

ooph ...なぜ、みんな非常にシンプルな作業を達成するために、正規表現を使用していますか?また、スペースの代わりとして "+"がURLの有効な文字であり、さらにawful lot of other charactersが使用される可能性があることを忘れてしまいました...

よく、とにかく、持っています本当に私はこのようなものでいいと思う

大幅に式の読みやすさを改善し、はるかに堅牢ですよAS3 regex metacharacters見... ...、:

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

関連する問題