是不错,但是对你发布的GPL不是很欣赏,为什么不是BSD,如果需要你的同意,我宁愿使用自己编写的,尽管慢点,呵呵

解决方案 »

  1.   

    hax (海曦)兄弟,你博客上写的比较乱,怕是很多人都不会去仔细研究,第一眼看上去我也是没看明白,把你的整理成了可以看到结果的例子,大家一起研究看看
    <script language=javascript>
      if (!String._FORMAT_SEPARATOR){
            String._FORMAT_SEPARATOR = String.fromCharCode(0x1f);
            String._FORMAT_ARGS_PATTERN = new RegExp('^[^' + String._FORMAT_SEPARATOR + ']*' + new Array(100).join('(?:.([^' + String._FORMAT_SEPARATOR + ']*))?'));
        }
        if (!String.format)
        String.format = function (s){
            return Array.prototype.join.call(arguments, String._FORMAT_SEPARATOR).replace(String._FORMAT_ARGS_PATTERN, s);
        }
        if (!''.format)
        String.prototype.format = function (){
            return (String._FORMAT_SEPARATOR +Array.prototype.join.call(arguments, String._FORMAT_SEPARATOR)).replace(String._FORMAT_ARGS_PATTERN, this);
        }var name = 'world';
    var result = 'Hello $1!'.format(name);
    alert(result)var letters = String.format('$1$2$3$4$5$6$7$8$9$10$11$12$13$14$15$16$17$18$19$20$21$22$23$24$25$26', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z');
    alert(letters)
    </script>
      

  2.   

    这样不好吗?为什么占位符编号到几,就要几次,高版本的浏览器replace函数支持的,hax (海曦)兄弟你的正则预查同样需要高版本的浏览器。
    var temp="'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'".replace(/[\' ]/g,'').split(",")
    var i=0;
    letters='$1$2$3$4$5$6$7$8$9$10$11$12$13$14$15$16$17$18$19$20$21$22$23$24$25$26'.replace(/\$\d{1,2}/g,function(a){return temp[i++]})
    alert(letters)
      

  3.   

    hbhbhbhbhb1021(天外水火(我要多努力)) 你用function(a){return temp[i++]})还是需要横多次替换啊
      

  4.   

    To ttyp:我并不排斥revised BSD,且revised BSD与GPL是兼容的。使用GPL/LGPL,只是因为我更欣赏GPL/LGPL推广Free Software的理念,且这小段代码是从我的PIES项目中攫取,该项目采用GPL/LGPL许可证。LGPL还是很宽松的,一般而言你不必获得我的许可,其实对于这样一小段脚本,我也没有考虑过怎样的用途是不合该许可证而需要得到我的同意的。这只是一小段代码而已,我只是随时传播自由的声明也。
      

  5.   

    to ttyp
    我觉得应该和replace('$1','a').replace('$2','b')这种不同吧,至少匹配的时候不会一次全部匹配结束在重头匹配,就是说lastIndex属性不用移动那么多次,只走一遍
      

  6.   

    To hbhbhbhbhb1021:不清楚你在说哪个问题,我所指的是各种实现,包括不太好的实现。如果你是说高版本可以用自定义函数替换,而不需要调用多次replace,则ttyp已经回答你了 :) 至于浏览器版本问题,我在blog上已经写了,如jscript 5.5以下的(如ie 5.0默认所带jscript 5.0)确实不行。但现在还使用非ecmascript 3的js引擎已经很稀少了,可忽略之。即使在某些商用环境中,不能升级浏览器如ie 5.0,至少也可只升级脚本引擎的。
      

  7.   

    TO hax:LGPL是可以转换为商业代码的,有赚取广大free software思想之嫌疑,相对的BSD,appache似乎自由度更大一点,还有个啥协议,只要使用者申明作者的就能使用,忘记名字了。TO hbhbhbhbhb1021(天外水火(我要多努力)) :是不同,但是用了function,至少会产生很多临时变量和堆栈吧
      

  8.   

    To (hb){5}1021 (名字太长,我用正则来写,呵呵):性能下降的关键在于自定义函数还是要被调用n次,例如"$1 $1 $1 $1".replace(/[$][0-9]/, f),f还是被调用了4次。而且随占位符的增加至少是线形增长。而我所写的实现始终只有一次Array.join和String.replace,且用到正则的复杂度是恒定的,因此整体性能是常数的。
      

  9.   

    支持一下。楼主 JavaScript功底确实很厉害。我是看晕了
      

  10.   

    经典不敢。只是抛砖引玉一下,如何在螺丝壳里做道场,其要义就是充分利用螺丝壳。这个代码片段其实是我在写logging的时候的产物,下一次我会把整个log4js拿出来与大家探讨,如何避免log对性能的影响。
      

  11.   

    不说了撒,仰慕ing...算了,我打算换版块了,非技术讨论版怎么样?^_^