1

我正在用 AS3/PHP(数据库调用)创建一个网站,我想在主页上加载新闻,从一个 mySQL 数据库提供。使用 AMFPHP 获取纯文本没有问题。但我正在寻找不同的东西。我知道如何在 AS3 中加载图像/YouTube 视频,所以我想用它来增加新闻的趣味性。有什么办法可以输入类似

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 库,所以我的第二个猜测是……正则表达式。不过,我似乎无法理解这一点,有人想尝试同样的事情并成功了吗?

提前致谢。

4

2 回答 2

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...
  }
于 2011-01-03T02:17:52.703 回答
1

这是正则表达式的完美工作。

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

括号[ ]和斜杠/是保留字符,因此需要使用反斜杠进行转义。[a-zA-Z0-9_-]是可以在有效 youtube id 中的字符范围。

要使用正则表达式,你可以这样:

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 作为 while 条件将相同的代码压缩为更少的行:

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

这在功能上是等效的,但可能有点难以掌握。

现在您有了索引和 id,剩下的就是拆分文本并插入视频!

于 2011-01-03T09:42:22.293 回答