同一类型的,两个帖子放一起看吧,:)
原帖 hax (海曦)的帖子
http://community.csdn.net/Expert/topic/5188/5188073.xml?temp=.1158716

解决方案 »

  1.   

    版主有空的话给点意见...
    http://community.csdn.net/Expert/TopicView.asp?id=5236016]PS: 虽然我已经弄懂了, 不过方法可能有点笨.
      

  2.   

    /**
     *  base object system extend - String
     */
    void function() {
      String.format = function(format) {
        for (var i = 1; i < arguments.length; i++) {
          format = format.replace("{" + (i - 1) + "}", arguments[i]);
        }
        return format;
      }
    }();Qomo里的方法.
    http://blog.csdn.net/aimingoo/archive/2006/09/17/1232359.aspx
      

  3.   

    To: woyingjie(沃英杰) String.format("{0}{1}{1}{1}{2}{3}{4}", "a", "b", "c");这个CASE在你的代码里有问题哟。
      

  4.   

    可惜Qomo的format不能实现"{0}{0}{2}{1}{1}"这样的格式.
      

  5.   

    不过你给了另一个解决的思路,谢谢,则你的代码效率要比我原来的代码高出 5% 且代码更精简了,谢谢!
    <script type="text/javascript">/*&lt;![CDATA[*/
    String.prototype.format=function()
    {
        if(arguments.length==0) return this;
        for(var s=this, i=0; i<arguments.length; i++)
        {
            s=s.replace(new RegExp("\\{"+i+"\\}","g"), arguments[i]);
        }
        return s;
    };
    var str = "{0}{1}{1}{1}{1}{2}{3}{4}{5}{6}{7}{8}{9}";
    alert(str.format("a", "b", "c", "d", "e", "f", "g"));
    /*]]&gt;*/
    </SCRIPT>
      

  6.   

    <script type="text/javascript">
    String.prototype.format = function() {
    if (arguments.length == 0) return this;
    function k(n) {
    var a, s = n.toString();
    if (n > 9) {
    //只做了双位处理
    //\d|1[0-2]
    //\d\d?|10\d|11[0-2]
    a = s.split("");
    return "\\d|" + a[0] + "[0-" + a[1] + "]";
    } else {
    return "[0-" + s + "]";
    }
    };
    var arg = arguments;
    return this.replace(new RegExp("\\{(" + k(arg.length - 1) + ")\\}", "g"), function (a, b) { return arg[b]; });
    };
    var str = "{0}{1}{1}{1}{1}{2}{3}{4}{5}{6}{7}{8}{9}{10}{11}";
    alert(str.format("a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k"));
    </script><script type="text/javascript">
    String.prototype.format = function() {
    if (arguments.length == 0) return this;
    for (var i = 0, n = "", c = ""; i < arguments.length; i ++) {
    n += c + i;
    c = "|";
    }
    var arg = arguments;
    return this.replace(new RegExp("\\{(" + n + ")\\}", "g"), function (a, b) { return arg[b]; });
    };
    var str = "{0}{1}{1}{1}{1}{2}{3}{4}{5}{6}{7}{8}{9}{10}{11}";
    alert(str.format("a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k"));
    </script>
    这两个哪个好些呢?
    for (var s = this, i = 0; i < arguments.length; i ++) {
    s = s.replace(new RegExp("\\{" + i + "\\}", "g"), arguments[i]);
    }
    应该比这个效率上要好些吧?
      

  7.   

    TO: muxrwc(王辰) 
        你的两段代码都没有跳出 RegExp 里套函数的模式,这个与我的第一段代码没有什么区别,效率上不会有什么提高的。且你的代码没有对低版本的浏览器的兼容,并不是所有浏览器都支持正则里套函数的。
      

  8.   

    噢。知道了。。
    感觉上。。
    for (var s = this, i = 0; i < arguments.length; i ++) {
    s = s.replace(new RegExp("\\{" + i + "\\}", "g"), arguments[i]);
    }
    这个是把s查找了arguments.length - 1遍
    我那种是查找了一遍查找的时候多限制了一些。
    而你的那个第一种,如果字符串里有N多{number}用不到,并且被匹配捕获出来然后又没有变动。。
      

  9.   

    测试了下。。
    s = s.replace(new RegExp("\\{"+i+"\\}","g"), arguments[i]);
    比我说那两种快了n。。
    比例是1 : 6 ++
    这个也很快。和第一那个的比例是3:1
    因为用了正则的字符慢了好多啊
      

  10.   

    这个也很快。和第一那个的比例是3:1

    s = s.split("{" + i + "}").join(arguments[i]);

    s = s.replace(new RegExp("\\{" + i + "\\}", "g"), arguments[i]);
      

  11.   

    s = s.replace(new RegExp("\\{" + i + "\\}", "g"), arguments[i]);
    这种方法肯定比 split-join 的方法要快的,且又可以兼容低版本的浏览器,所以我就只用它了
      

  12.   

    Mark~PS:我已经忽略IE5.5以下 和 任何其他的浏览器
      

  13.   

    meizz(梅花雪)
    牛X的人啊,CSDN的风云人物,骨灰级大师啊,我N体投地(N等于无限大)
      

  14.   

    return this.replace(/\{(\d+)\}/g, function(a, b){return A[b]||a}); 
    这句看不明白后面的a和b的值从哪过来的?
      

  15.   

    代码效率要比我原来的代码高出 5% 且代码更精简了!
    <script type="text/javascript">/*&lt;![CDATA[*/
    String.prototype.format=function()
    {
        if(arguments.length==0) return this;
        for(var s=this, i=0; i<arguments.length; i++)
        {
            s=s.replace(new RegExp("\\{"+i+"\\}","g"), arguments[i]);
        }
        return s;
    };
    var str = "{0}{1}{1}{1}{1}{2}{3}{4}{5}{6}{7}{8}{9}";
    alert(str.format("a", "b", "c", "d", "e", "f", "g"));
    /*]]&gt;*/
    </SCRIPT>