简明现代魔法 -> JavaScript -> 再谈JavaScript的replace()函数

再谈JavaScript的replace()函数

2010-08-12

6月份的时候,我写过过一篇关于Replace()函数的使用,并用它实现了搜索关键字高亮的效果。但没有很具体地介绍这个函数,这里补全一下。

replace() 方法的参数 replacement 可以是函数而不是字符串。在这种情况下,每个匹配都调用该函数,它返回的字符串将作为替换文本使用。该函数的第一个参数是匹配模式的字符串。接下来的参数是与模式中的子表达式匹配的字符串,可以有 0 个或多个这样的参数。接下来的参数是一个整数,声明了匹配在 stringObject 中出现的位置。最后一个参数是 stringObject 本身。

下面展示了几种javascript正则表示式的repalce方式,有些方式我们很少在别的地方看到,如第二种和第三方中方法。

//下面的例子用来获取url的两个参数,并返回urlRewrite之前的真实Url
var reg = new RegExp("(http://www.nowamagic.net/BookReader/)(\\d+),(\\d+).aspx","gmi");
var url="http://www.nowamagic.net/BookReader/1017141,20361055.aspx";

//方式一,最简单常用的方式
var rep = url.replace(reg,"$1ShowBook.aspx?bookId=$2&chapterId=$3");
alert(rep);

//方式二 ,采用固定参数的回调函数
var rep2 = url.replace(reg,function(m,p1,p2,p3){return p1+"ShowBook.aspx?bookId="+p3+"&chapterId="+p3});
alert(rep2);

//方式三,采用非固定参数的回调函数
var rep3 = url.replace(reg,function(){var args=arguments; return args[1]+"ShowBook.aspx?bookId="+args[2]+"&chapterId="+args[3];});
alert(rep3);

//方法四
//方式四和方法三很类似, 除了返回替换后的字符串外,还可以单独获取参数
var bookId;
var chapterId;
function capText()
{
    var args = arguments; 
    bookId = args[2];
    chapterId = args[3];
    return args[1]+"ShowBook.aspx?bookId = "+args[2]+"&chapterId="+args[3];
}

var rep4 = url.replace(reg,capText);
alert(rep4);
alert(bookId);
alert(chapterId);


//除了使用replace方法获取正则表示式的分组外,还可以使用test ,exec方法获取分组,只是手法有所不同而已
var reg2 = new RegExp("(http://www.nowamagic.net/BookReader/)(\\d+),(\\d+).aspx","gmi");
var m = reg2.exec("http://www.nowamagic.net/BookReader/1017141,20361055.aspx");
var s="";
//获取所有的分组
for (i = 0; i < m.length; i++) {
      s = s + m[i] + "\n";      
      }
alert(s);

bookId = m[2];
chapterId = m[3];
alert(bookId);
alert(chapterId);


//使用test方法获取分组
var reg3 = new RegExp("(http://www.nowamagic.net/BookReader/)(\\d+),(\\d+).aspx","gmi");
reg3.test("http://www.nowamagic.net/BookReader/1017141,20361055.aspx");
//获取三个分组
alert(RegExp.$1); 
alert(RegExp.$2);
alert(RegExp.$3);

var str="www.nowamagic.com";
        //str.format("好","q")
        
        str.replace(new RegExp("(\\.)(bai)du","g"),function(){
            
            for(var i=0; i<arguments.length; i++)
            {
                    document.write(arguments[i]+"<br/ >");
            }
            document.write("-------------------------------------------------<br/>");
        });

两个例子证明,replace传入正则参数和字符传参数结果不同:

alert("123".replace("1",function(){var un;return un;}));  //弹出undefined23
alert("123".replace(new RegExp("1"),function(){var un;return un;}));  //弹出23
随机文章推荐
网站分类


注:如需转载本文,请注明出处(原文链接),谢谢。更多精彩内容,请进入简明现代魔法首页。

进入新博客
喜欢本文,就分享它吧
给我留言
您的名字:
您的邮件:
您的网站:


 

copyright © 2009 简明现代魔法    学习、分享、进步

power by Gonn 感谢所有关心和支持本站的朋友们