2015-10-16 72 views
1

这不是重复的,因为在AS3中所有其他问题都是而不是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... 
    } 
} 

如果有更好的方式来做到这一点,请让我知道!

回答

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

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

+0

您没有在方括号中括起'\ w',最后一个'+'和'i'标志已过时。正确的变体是:'/ AA _(\ w +):?/ g' – leetwinski

+0

你对我在尝试一些不同选项后留下的尾随'+'是否正确,现在删除。 '\ w'周围的方括号被保留,所以Skysplitter可以很容易地添加额外的字符(按照答案的后半部分)。 –

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

你也必须排除冒号,所以你最好像这样拆分它:'a:Array = storage.split(/:?AA _ /);' – leetwinski

0

你也可以只用一行做到这一点,以更加先进的正则表达式:

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

所以这意味着:一个或多个单词字符,用“AA_”开头,随后经“:”或字符串的结尾。 (请注意,“AA_”和“:”不会包含在结果的匹配中)

相关问题