【问题标题】:actionscript3.0 replace curly brace pairactionscript3.0 替换花括号对
【发布时间】:2015-03-24 03:14:06
【问题描述】:
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

但它没有工作。

我曾尝试过双斜杠样式的正则表达式:/{0}/,但 ide 抱怨语法错误。

【问题讨论】:

    标签: regex actionscript-3 curly-braces


    【解决方案1】:

    让我们从你尝试过的开始:

    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的信息,你可以看看:

    希望能有所帮助。

    【讨论】:

      【解决方案2】:

      试试这个表达式\{\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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-04-19
        • 2016-11-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-26
        相关资源
        最近更新 更多