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

AS3: Get all substrings from a string in a specified array

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

这是我的问题:我试图找到 "storage" 字符串中的一些子字符串,它们位于另一个字符串中。我需要这样做,因为我的游戏服务器正在向客户端发送包含 "storage" 字符串中的一个字符串的随机消息。从服务器发送的字符串将始终以:"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...
    }
}

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

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]:" - 然后将这些字符添加到捕获组内的字符集中。

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

为什么不直接使用 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

希望能帮到你。

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

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

所以这意味着:一个或多个单词 char,前面是 "AA_",后面是“:”或字符串结尾。 (请注意,"AA_" 和“:”不会包含在结果匹配中)