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_" 和“:”不会包含在结果匹配中)
这不是重复问题,因为所有其他问题在 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_" 和“:”不会包含在结果匹配中)