这不是重复,因为在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 :(得分: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;不会被包含在最终的匹配中)