2011-06-06 26 views
0

我完全不知道任何正則表達式。基本上我想要做的是,我可以用它來調用錯誤(顯然)看起來像這樣的錯誤類:AS3 /正則表達式 - 替換字符串的分段

package avian.framework.errors 
{ 
    public class AvError extends Object 
    { 
     // errors 
     public static const LAYER_WARNING:String = "Warning: {0} is not a valid layer - the default layer _fallback_ has been used as the container for {1}."; 

     /** 
     * Constructor 
     * Places a warning or error into the output console to assist with misuse of the framework 
     * @param err The error to display 
     * @param params A list of Objects to use throughout the error message 
     */ 
     public function AvError(err:String, ...params) 
     { 
      trace(err); 
     } 
    } 
} 

我希望能夠做的就是使用LAYER_WARNING這樣的:

new AvError(AvError.LAYER_WARNING, targetLayer, this); 

,並具有輸出沿着線的東西:

Warning: randomLayer is not a valid layer - the default layer _fallback_ has been used as the container for [object AvChild]. 

的想法是,在...params解析,0第一個參數來代替與第二等


我已經做了一些研究,我想我已經工作了,我需要使用這個搜索模式:

var pattern:RegExp = /{\d}/; 
+1

http://gskinner.com/RegExr/desktop/&http://gskinner.com/RegExr/ – 2011-06-06 09:39:10

+0

@Ascension Systems乾杯。 – Marty 2011-06-06 09:51:54

回答

0

RegExp使用g標誌,你可以創建一個包含所有{x}匹配的數組,然後通過這個數組的循環用相應的參數替換每個匹配。

代碼:

var mystring:String = "{0} went to {1} on {2}"; 

function replace(str:String, ...params):String 
{ 
    var pattern:RegExp = /{\d}/g; 
    var ar:Array = str.match(pattern); 

    var i:uint = 0; 
    for(i; i<ar.length; i++) 
    { 
     str = str.split(ar[i]).join(params[i]); 
    } 

    return str; 
} 

trace(replace(mystring, "marty", "work", "friday")); // marty went to work on friday 
0

您可以使用StringUtil

var original:String = "Here is my {0} and my {1}!"; 
var myStr:String = StringUtil.substitute(original, ['first', 'second']); 
+0

任何想法,爲什麼我得到:1120:訪問未定義的屬性StringUtil。 ?我甚至添加了導入mx.utils.StringUtil,但它仍然不起作用。 – Marty 2011-06-06 07:23:08

+0

嘗試使用「import mx.utils;」而不是「mx.utils.StringUtil;」 – loxxy 2011-06-06 07:30:58

+0

仍然沒有運氣;即使導入了mx.utils。*; – Marty 2011-06-06 07:36:27

0

我假設你想有({0},{1},{2}等)在每個字符串常量變化的情況下,更換幾個靜態常量。

這樣的事情應該工作 - 對不起,這是未經測試:

public function AvError(err:String, ...params) 
{ 
     var replacementArray:Array = err.match(new RegExp("{\\d}", "g")); 

     for (var i:int = 0, i < replacementArray.length, i++) 
      err = err.replace(new RegExp(replacementArray[i], "g"), params[i]); 

     trace(err); 
} 

如果你有不同的更換情況下,幾個靜態常量,你要檢查所傳遞的…params適當匹配量。