AS3 /正则表达式 - 替换字符串的段

时间:2011-06-06 06:56:05

标签: regex flash actionscript-3 replace

我完全不了解正则表达式。基本上我正在尝试做的是有一个错误类,我可以用来调用错误(显然),看起来像这样:

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].

我们的想法是将{0}替换为...params中解析的第一个参数,{1}替换为var pattern:RegExp = /{\d}/; 等等。


我做了一些研究,我想我已经研究出我需要使用这种模式进行搜索:

{{1}}

3 个答案:

答案 0 :(得分:0)

您可以使用StringUtil

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

答案 1 :(得分:0)

使用g中的RegExp标记,您可以创建一个包含所有{x}个匹配项的数组,然后遍历此数组并使用相应的参数替换每个匹配项。< / p>

代码:

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

答案 2 :(得分: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的适当匹配量。