AS3使用RegEx用短划线替换字符串部分

时间:2012-02-13 15:23:17

标签: regex actionscript-3

我希望能够用短划线替换字符串的一部分。被替换的部分将是可变的。

var str:String = "permanentContainer-temporaryContainer-"
var test:String = "temp";
var pattern:RegExp = /-[(+test+)]+-/i;
trace( str.replace(pattern,"-"));

我想要跟踪结果:

permanentContainer--oraryContainer-

2 个答案:

答案 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开始进行子搜索。)