【问题标题】:AS3 BBcode or replacement-technique?AS3 BBcode 还是替换技术?
【发布时间】:2011-01-02 20:04:49
【问题描述】:

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

提前致谢。

【问题讨论】:

    标签: php flash actionscript-3 bbcode amfphp


    【解决方案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,剩下的就是分割文本并插入视频!

    【讨论】:

    • 非常感谢,我需要两个答案的组合,但我很确定我会解决的!
    【解决方案2】:

    你应该能够让它与 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...
      }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-16
      • 2011-05-04
      • 2013-09-03
      相关资源
      最近更新 更多