AS3 BBcode или метод замены? - PullRequest
1 голос
/ 02 января 2011

Я делаю сайт на AS3 / PHP (databasecalls) и хочу загружать новости на домашнюю страницу, получая информацию из базы данных 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 прямо между моим текстом и создать два TextFields? Для AS3 нет библиотеки BBcode, поэтому мое второе предположение было ... регулярное выражение. Кажется, я не могу обдумать это, кто-то когда-нибудь хотел попробовать то же самое и преуспел?

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

Ответы [ 2 ]

1 голос
/ 03 января 2011

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

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

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

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

1 голос
/ 03 января 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...
  }
...