将replaceAll方法添加到ActionScript String类

Ali*_*aru 1 apache-flex oop actionscript actionscript-3

我需要一些帮助,将所有功能添加到我的Flex项目中.我希望以尽可能自然的方式做到这一点.

我想要实现的是能够运行此代码(使用Flex编译器)"aabbaaba".replaceAll("b","c")并获得"aaccaaca".我也想连锁replaceAll电话.
注意:我实际上不会用bs 代替s c,而是在编码时不知道的各种字符串!

我不想要的:
1.使用带有全局标志的正则表达式.要替换的标记是确定广告运行时间并将它们转换为正则表达式并不是直截了当的.
2.使用该StringUtil.replace方法.这是一种静态方法,链接很难看.
3.连锁splitjoin.因为在阅读代码时可能会让其他人感到困惑.
4.禁用严格类型检查.我想对我的其余代码进行类型检查.


这是我到目前为止:

String.prototype.replaceAll = function(replace:String, replaceWith:String):String{
    return this.split(replace).join(replaceWith);
}
Run Code Online (Sandbox Code Playgroud)

并且可以像这样调用:

"aababacaaccb"["replaceAll"]("b", "c")["replaceAll"]("c", "a");
Run Code Online (Sandbox Code Playgroud)

此外,是否有任何建议反对通过原型扩展对象?我也接受一个强烈反对通过原型扩展String对象的答案.


Alin,谢谢你

9re*_*9re 7

第二个答案是:

为String编写包装器类StringEx,您可以将replaceAll定义为链接

public function replaceAll(replace:String, replaceWith:String):StringEx {
   string = string.replace(new RegExp(replace, 'g'), replaceWith);
   return this;
}
Run Code Online (Sandbox Code Playgroud)

通过提供toString(),您可以轻松地将StringEx对象更改为String

var result:String = "" + new StringEx("aaccaaca").replaceAll('b', 'c').replaceAll('c', 'a');
Run Code Online (Sandbox Code Playgroud)

你可以在这里获得完整版:OOP原型扩展方式 - wonderfl build flash online