开发者社区> 云栖希望。> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

JS (javascript) 中 replace 详解

简介:
+关注继续查看

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

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

//下面的例子用来获取url的两个参数,并返回urlRewrite之前的真实Url
var reg=new RegExp("(http://www.qidian.com/BookReader/)(\d+),(\d+).aspx","gmi");
var url="http://www.qidian.com/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.qidian.com/BookReader/)(\d+),(\d+).aspx","gmi");
var m=reg2.exec("http://www.qidian.com/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.qidian.com/BookReader/)(\d+),(\d+).aspx","gmi");
reg3.test("http://www.qidian.com/BookReader/1017141,20361055.aspx");
//获取三个分组
alert(RegExp.$1);
alert(RegExp.$2);
alert(RegExp.$3);

var str="www.baidu.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

本文转自博客园知识天地的博客,原文链接:JS (javascript) 中 replace 详解 需转载请自行联系原博主。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
【JS高级进阶】JavaScript初识面向对象
【JS高级进阶】JavaScript初识面向对象
0 0
【JavaScript-动画原理】如何使用js进行动画效果的实现
【JavaScript-动画原理】如何使用js进行动画效果的实现
0 0
万文篇章带你搞懂JavaScript——如何使用js实现模态框拖动,放大镜和侧边栏固定效果
万文篇章带你搞懂JavaScript——如何使用js实现模态框拖动,放大镜和侧边栏固定效果
0 0
【JavaScript-函数】函数是什么?一文搞懂js当中的函数,
【JavaScript-函数】函数是什么?一文搞懂js当中的函数,
0 0
【JavaScript—数组】详解js数组一篇文章吃透js-数组
【JavaScript—数组】详解js数组一篇文章吃透js-数组
0 0
【JavaScript-循环-js循环你学懂了吗】
【JavaScript-循环-js循环你学懂了吗】
0 0
【JavaScript-循环-js你学懂了吗?】
【JavaScript-循环-js你学懂了吗?】
0 0
JS查漏补缺——JavaScript的继承实现
JS查漏补缺系列是我在学习JS高级语法时做的笔记,通过实践费曼学习法进一步加深自己对其的理解,也希望别人能通过我的笔记能学习到相关的知识点。这一次我们来了解JavaScript的继承实现
0 0
【JS基础】从JavaScript中的for...of说起(下) - async和await
【JS基础】从JavaScript中的for...of说起(下) - async和await
0 0
【JS基础】从JavaScript中的for...of说起(上) - iterator 和 generator
【JS基础】从JavaScript中的for...of说起(上) - iterator 和 generator
0 0
+关注
云栖希望。
我是个随便的人
文章
问答
文章排行榜
最热
最新
相关电子书
更多
Javascript中的函数
立即下载
Javascript异步编程
立即下载
Javascript中的对象
立即下载