2011-01-02 11 views
1

Ich mache eine Website in AS3/PHP (Datenbankanrufe) und ich möchte Nachrichten auf der Homepage laden, gespeist aus einer MySQL-Datenbank. Kein Problem, um mit AMFPHP reinen Text zu erhalten. Aber ich suche nach etwas anderem. Ich weiß, wie man Bilder/YouTube-Videos in AS3 lädt, also möchte ich die Nachrichten etwas aufpeppen. Gibt es eine Möglichkeit, ich kann Eingabe etwas wieAS3 BBcode oder Ersatztechnik?

Lorem ipsum dolor sit amet, consectetur adipiscing elit. 
[video]AAAAAAAAAAA[/video] 
Donec commodo condimentum enim, vitae consectetur felis pharetra a. 

es wäre eine Instanz meiner YouTube API-Klasse macht genau zwischen meinem Text und zwei Textfelder machen? Es gibt keine BBcode-Bibliothek für AS3, also war meine zweite Vermutung ... Regex. Scheint mir nicht so, aber wer wollte schon immer das gleiche versuchen und Erfolg haben?

Vielen Dank im Voraus.

Antwort

1

Dies ist für einen regulären Ausdruck ein perfekter Job.

var myPattern:RegExp = /\[video\]([a-zA-Z0-9_-]+)\[\/video\]/g; 

Die Klammern [ ] und der Schrägstrich / Zeichen sind reserviert, also müssen sie mit einem Backslash geschützt werden. [a-zA-Z0-9_-] ist der Zeichenbereich, der in einer gültigen Youtube-ID enthalten sein kann.

die Regex nutzen zu können, so gehen:

var str:String = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. \n[video]AAAAAAAAAAA[/video]\nDonec commodo condimentum enim, vitae consectetur felis pharetra a."; 

var result:Object = myPattern.exec(str); 
while (result != null) { 
    trace("id is: " + result[0] + " at index: " + result.index); 
    result = myPattern.exec(str); 
} 

Sie können auch den gleichen Code in weniger Zeilen komprimieren, indem die assingment als während Zustand zu versetzen:

var result:Object; 
while (result == myPattern.exec(str)) { 
    trace("id is: " + result[0] + " at index: " + result.index); 
} 

Dies ist funktional äquivalent , kann aber etwas schwerer zu fassen sein.

Jetzt haben Sie den Index und die ID, alles was übrig bleibt ist, den Text zu teilen und das Video einzufügen!

+0

Vielen Dank, ich brauche eine Kombination aus beiden Antworten, aber ich bin mir ziemlich sicher, dass ich es durcharbeiten werde! – Nick

1

Sie sollten in der Lage sein, dies mit der String split() -Methode zu erreichen. Definieren Sie ein Trennzeichen und verwenden Sie die Methode split(), um ein Array von Teilzeichenfolgen zurückzugeben.

Hier ist ein einfaches Beispiel, das ich bin sicher, Sie optimieren ...

private var result:String = "Lorem ipsum dolor sit amet, consectetur adipiscing 
elit [--video--]myexample.com/video_url[--video--] Donec commodo condimentum enim, vitae 
consectetur felis pharetra a." 

private var separator:String = "[--video--]"; 

//Assuming that you're only using one video... 
private function parseString(value:String):void 
{ 
     var texts:Array = value.split(separator); 

     if(texts.length >= 2) //there's a video 
      initTextWithVideo(texts); 
     else // it's only text 
      initText(result); 
    } 

    private function initTextWithVideo(value:Array):void 
    { 
     var text1:String = value[0]; 
     var videoURL:String = value[1]; 
     var text2:String = value[2]; 
     //etc... 
    }