actionscript 3.0替换大括号对

时间:2015-03-24 03:14:07

标签: regex actionscript-3 curly-braces

var strToBeReplace:String= "Hi! I am {0}, and I like {1}, I used to be a {2}"; // many {\d} like curly brace to be replace
trace(replaceCurlyBrace(strToBeReplace, "tom", "eating", "techer"));
// expect output: Hi! I am tom, and I like eating, I used to be a teacher

function replaceCurlyBrace(str:String, ... args):void
{
     // ... how to implement

}

我试过这个:

var str:String = "bla bla {0} bla";
var reg:Regexp = new Regexp("{0}");
trace(strToBeReplace.replace(reg,"tim"));
// real output : bla bla {0} bla

但它没有用。

我曾尝试使用双斜杠样式regexp:/ {0} /,但是ide抱怨语法错误。

2 个答案:

答案 0 :(得分:2)

让我们从您尝试的内容开始:

var reg:RegExp = new RegExp('{0}');     // you can write it : var reg:RegExp = /{0}/;
var str:String = 'bla bla {0} bla';

trace(str.replace(reg, 'tim'));

您应该知道{}quantifier metacharacter 用于指定前一项的数字量词或量词范围,例如,如果您写/a{3}/,则告诉您 你正在寻找任何' aaa'字符串,所以实际上写作/{0}/并没有任何感觉或效用。

所以要向编译器表明你正在寻找字符串"{0}",你可以这样做:

var reg:RegExp = /{[0]}/;   // you can write it : var reg:RegExp = new RegExp('{[0]}');

或者,您可以使用单个{}\,如果使用字符串)转义\\

var reg:RegExp = /\{0}/;    // you can write it : var reg:RegExp = new RegExp('\\{0}');

为您提供此代码:

var reg:RegExp = new RegExp('\\{0}');
var str:String = 'bla bla {0} bla';

trace(str.replace(reg, 'tim'));     // gives : bla bla tim bla

回到你的问题,你的字符串中有n个单词要替换,所以你可以这样做:

var str:String = 'Welcome to {0}, the free {1} that {2} can {3}.';
    str = replaceCurlyBrace(str, 'Wikipedia', 'encyclopedia', 'anyone', 'edit');

trace(str); // gives : Welcome to Wikipedia, the free encyclopedia that anyone can edit.

function replaceCurlyBrace(str:String, ... args): String {

    var exp0:RegExp = /\{/,     //  or : /{[/
        exp1:RegExp = /}/,      //  or : /]}/
        regex:RegExp;

    // if we have words
    if(args.length > 0) {   
        for(var i:int = 0; i<args.length; i++){
            // you can also write it : regex = new RegExp('\\{' + i + '}');
            // or                      regex = new RegExp('{[' + i + ']}');
            regex = new RegExp(exp0.source + i + exp1.source);  
            str = str.replace(regex, args[i]);
        }       
    }   
    return str;

}

有关RegExp的更多详情,请参阅:

希望可以提供帮助。

答案 1 :(得分:0)

尝试使用此表达式\{\d*?\}。请注意,要转义字符,您需要使用反斜杠\。 在你的例子中     var str:String = "bla bla {0} bla"; var reg:Regexp = new Regexp("\{0\}"); trace(strToBeReplace.replace(reg,"tim")); // real output : bla bla tim bla