AS3:从指定数组中的字符串中获取所有子字符串
这不是重复的,因为在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...
}
}
如果有更好的方式来做到这一点,请让我知道!
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
希望能有所帮助。
你也必须排除冒号,所以你最好像这样拆分它:'a:Array = storage.split(/:?AA _ /);' – leetwinski
你也可以只用一行做到这一点,以更加先进的正则表达式:
var storage:String = 'AA_word1:AA_word2:AA_word3:AA_example1:AA_example2';
const a:Array = storage.match(/(?<=AA_)\w+(?=:|$)/g);
所以这意味着:一个或多个单词字符,用“AA_”开头,随后经“:”或字符串的结尾。 (请注意,“AA_”和“:”不会包含在结果的匹配中)
您没有在方括号中括起'\ w',最后一个'+'和'i'标志已过时。正确的变体是:'/ AA _(\ w +):?/ g' – leetwinski
你对我在尝试一些不同选项后留下的尾随'+'是否正确,现在删除。 '\ w'周围的方括号被保留,所以Skysplitter可以很容易地添加额外的字符(按照答案的后半部分)。 –