在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测试通过.