BBcode AS3 или методика замены?

Я создаю веб-сайт на AS3 / PHP (вызовы базы данных), и я хочу загружать новости на домашнюю страницу из базы данных mySQL. Без проблем получить простой текст с AMFPHP. Но я ищу другое. Я знаю, как загружать изображения / видео с YouTube в AS3, поэтому хочу немного оживить этим новости. Есть ли способ ввести что-то вроде

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

он сделает экземпляр моего класса API YouTube прямо между моим текстом и создаст два текстовых поля? Для AS3 нет библиотеки BBcode, поэтому я предполагал, что ... регулярное выражение. Не могу понять, что кто-нибудь когда-нибудь хотел попробовать то же самое и преуспел?

Заранее спасибо.


person Nick    schedule 02.01.2011    source источник


Ответы (2)


Это идеальная работа для регулярного выражения.

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

Скобки [ ] и косая черта / являются зарезервированными символами, поэтому их необходимо экранировать обратной косой чертой. [a-zA-Z0-9_-] - это диапазон символов, которые могут быть в допустимом идентификаторе YouTube.

Чтобы использовать регулярное выражение, выполните следующие действия:

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

Вы также можете сжать тот же код до меньшего количества строк, поместив задание в качестве условия while:

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

Это функционально эквивалентно, но может быть немного труднее понять.

Теперь у вас есть индекс и идентификатор, осталось только разделить текст и вставить видео!

person grapefrukt    schedule 03.01.2011
comment
Большое спасибо, мне понадобится комбинация обоих ответов, но я почти уверен, что у меня это получится! - person Nick; 06.01.2011

Вы должны иметь возможность заставить это работать с методом 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...
  }
person PatrickS    schedule 03.01.2011