我希望能够用短划线替换字符串的一部分。被替换的部分将是可变的。
var str:String = "permanentContainer-temporaryContainer-"
var test:String = "temp";
var pattern:RegExp = /-[(+test+)]+-/i;
trace( str.replace(pattern,"-"));
我想要跟踪结果:
permanentContainer--oraryContainer-
答案 0 :(得分:1)
var str:String = "permanentContainer-temporaryContainer-"
var test:String ="temp";
var regex:RegExp = new RegExp(test,"ig");
trace(str.replace(regex,"-"));
答案 1 :(得分:0)
如果要替换的变量测试字符串不使用特殊的正则表达式匹配,那么简单的字符串函数可能会更有效(toLowerCase实现不区分大小写的匹配,相当于正则表达式“i”选项):
var str:String = "permanentContainer-temporaryContainer-";
var test:String = "temp";
var idx:int = str.toLowerCase().indexOf(test.toLowerCase());
str = str.substr(0, idx)+'-'+str.substr(idx+test.length);
trace(str);
如果要替换测试字符串的所有实例(相当于正则表达式“g”选项):
var str:String = "permanentContainer-temporaryContainer-";
var test:String = "temp";
var idx:int = str.toLowerCase().indexOf(test.toLowerCase());
while (idx>=0) {
str = str.substr(0, idx)+'-'+str.substr(idx+test.length);
trace(str);
idx = str.toLowerCase().indexOf(test.toLowerCase());
}
我测试了substr与RegEx的性能,它非常接近,但事实证明当你开始添加不区分大小写和全局替换等选项时,RegEx更快(在我的平台上)(通过本机实现的强大功能) ),虽然可以优化字符串方法(即只调用toLowerCase一次预循环,或从最后匹配的idx开始进行子搜索。)