IE5实现高版本的String.prototype.replace功能

来源:互联网 发布:阿里云 中策橡胶 编辑:程序博客网 时间:2024/04/27 20:38

在script5.6以上string的replace新增了功能,第二个参数可以是一个函数。

在实际使用时这个功能是十分有用的,可以实现嵌套的替换。现在来讲解一下如何在IE5中也实现该功能。如有讲得不到之处请指正。

<SCRIPT LANGUAGE="JavaScript">

<!--

/*

 * Author : 蒲佛信

 * Date : 2006-4-9

 */

String.replace = String.prototype.replace;

//保存原有的replace功能

if ("".replace(/^/,String))

String.prototype.replace = function (r, m)

{

    if (typeof m == "function")

    {

        if (typeof r == "string")

        {

            //只调用一次function

            return String.replace.call(this, r, m(r));

        }

        else if (r && r.constructor == RegExp)

        {

            var mc;

            var s1 = this, s2 = "";

            var r2 = new RegExp(r.source, r.ignoreCase ? "i" : "");

            //循环调用function替换

            while (s1 && (mc = r2.exec(s1)))

            {

                s2 += s1.slice(0, mc.index) + m.apply(null, mc);

                s1 = s1.slice(mc.index + mc[0].length);

                if (!r.global) break;

            }

            return s2 + s1;

        }

        else

        {

            //调用原来的replace功能

            return String.replace.call(this, String(r), m);

        }

    }

    else

    {

        return String.replace.call(this, r, m);

    }

}

//-->

</SCRIPT>

 

 
 以上函数在IE6和Firefox1.2测试通过.