2015-10-16 104 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_」和「:」不會包含在結果的匹配中)

相關問題