2011-01-02 5 views
1

저는 AS3/PHP (databasecalls)로 웹 사이트를 만들고 있는데, mySQL 데이터베이스에서 제공되는 홈페이지에서 뉴스를로드하고 싶습니다. AMFPHP로 일반 텍스트를 얻는 데 아무런 문제가 없습니다. 그러나 나는 다른 것을 찾고 있습니다. AS3에서 이미지/YouTube 동영상을로드하는 방법을 알고 있으므로 뉴스에 약간의 자극을주고 싶습니다.AS3 BBcode 또는 대체 기술?

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

내 YouTube API 클래스의 인스턴스를 내 텍스트 사이에 만들고 두 개의 TextField를 만들 수있는 방법이 있습니까? AS3 용 BBcode 라이브러리가 없으므로 두 번째 추측은 ... 정규식입니다. 그래도 내 머리를 감싸는 것처럼 보이지 않는 사람은 누구나 똑같은 것을 시도하고 성공할 수 있었습니까?

미리 감사드립니다.

답변

1

이 정규 표현식에 대한 완벽한 직업입니다 ... 당신이 최적화 할 수 있습니다 확신 기본적인 예입니다.

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

브래킷 [ ] 및 슬래시 / 문자 예약 된, 그래서 그들은 백 슬래시로 이스케이프해야합니다. [a-zA-Z0-9_-]은 유효한 유튜브 ID에 포함될 수있는 문자의 범위입니다.

이 같은 이동 정규식을 사용하려면

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

이 기능적으로 동일합니다 :

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); 
} 

당신은 또한 동안의 조건으로 assingment를 넣어 적은 라인에 동일한 코드를 압축 할 수 있습니다 , 그러나 파악하기 조금 더 어려울 수있다.

이제 색인과 ID가 있습니다. 나머지는 텍스트를 나눠서 삽입하는 것입니다.

+0

고마워, 나는 두 가지 대답의 조합이 필요 하겠지만, 나는 그것을 해결할 것이라고 확신한다! – Nick

1

String split() 메서드를 사용하려면이 메서드를 사용할 수 있어야합니다. 구분 기호를 정의하고 split() 메서드를 사용하여 하위 문자열 배열을 반환하십시오.

여기

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... 
    } 
관련 문제