AS3:从指定数组中的字符串中获取所有子字符串

时间:2015-10-16 23:37:53

标签: string actionscript-3 flash

这不是重复,因为在AS3中所有其他问题都是

这是我的问题:我试图在“存储”字符串中找到一些子字符串,这些字符串位于另一个字符串中。我需要这样做是因为我的游戏服务器正在向客户端发送包含“存储”字符串中字符串的随机消息。从服务器发送的字符串将始终以:“AA _”开头。

我的代码:

private var storage:String = AA_word1:AA_word2:AA_word3:AA_example1:AA_example2";
    if(test.indexOf("AA_") >= 0) {
        //i dont even know if this is right...
    }
}

如果有更好的方法,请告诉我!

3 个答案:

答案 0 :(得分:1)

为什么不使用String.split()

var storage:String = 'AA_word1:AA_word2:AA_word3:AA_example1:AA_example2';

var a:Array = storage.split('AA_'); 
// gives : ,word1:,word2:,word3:,example1:,example2

// remove the 1st ","
a.shift();                          

trace(a);  // gives : word1:,word2:,word3:,example1:,example2

希望可以提供帮助。

答案 1 :(得分:0)

Regular Expressions是这项工作的正确工具:

function splitStorage(storage: String){
    var re: RegExp = /AA_([\w]+):?/gi;

    // Execute the regexp until it 
    // stops returning results.
    var strings = [];
    var result: String;
    while(result = re.exec(storage)){
        strings.push(result[1]);
    }
    return strings;
}

这一点的重要部分是正则表达式本身:/AA_([\w]+):?/gi 这表示找到以AA_开头的匹配项,然后是一个或多个字母数字字符(我们捕获)([\w]+),后面跟一个冒号。

然后匹配变为全局且不区分大小写/gi

如果您需要捕获的不仅仅是字母和数字 - 如下所示:"AA_word1 has spaces and [special-characters]:" - 然后将这些字符添加到捕获组内的字符集中。

e.g。 ([-,.\[\]\s\w]+)还会匹配连字符,逗号,句号,方括号,空格和字母数字字符。

答案 2 :(得分:0)

你也可以只用一行,用更高级的正则表达式来实现:

var storage:String = 'AA_word1:AA_word2:AA_word3:AA_example1:AA_example2';
const a:Array = storage.match(/(?<=AA_)\w+(?=:|$)/g);

所以这意味着:一个或多个单词char,前面是&#34; AA _&#34;然后是&#34;:&#34;或者字符串的结尾。 (注意&#34; AA _&#34;和&#34;:&#34;不会被包含在最终的匹配中)