JS的replace方法详细介绍


Posted in Javascript onNovember 09, 2012

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
Javascript 相关文章推荐
基于Jquery插件开发之图片放大镜效果(仿淘宝)
Nov 19 Javascript
Vue.js 父子组件通讯开发实例
Sep 06 Javascript
浅析JS中对函数function的理解(基础篇)
Oct 14 Javascript
浅谈原生JS实现jQuery的animate()动画示例
Mar 08 Javascript
全面解析vue中的数据双向绑定
May 10 Javascript
基于react框架使用的一些细节要点的思考
May 31 Javascript
AngularJS 验证码60秒倒计时功能的实现
Jun 05 Javascript
总结js函数相关知识点
Feb 27 Javascript
WebSocket的简单介绍及应用
May 23 Javascript
微信小程序表单验证插件WxValidate的二次封装功能(终极版)
Sep 03 Javascript
解决Vue打包上线之后部分CSS不生效的问题
Nov 12 Javascript
node.js基础知识汇总
Aug 25 Javascript
获取div编辑框,textarea,input text的光标位置 兼容IE,FF和Chrome的方法介绍
Nov 08 #Javascript
javascript模拟select,jselect的方法实现
Nov 08 #Javascript
js实现图片放大缩小功能后进行复杂排序的方法
Nov 08 #Javascript
jquery的ajax()函数传值中文乱码解决方法介绍
Nov 08 #Javascript
表头固定(利用jquery实现原理介绍)
Nov 08 #Javascript
Javascript继承(上)——对象构建介绍
Nov 08 #Javascript
异步javascript的原理和实现技巧介绍
Nov 08 #Javascript
You might like
php 中文和编码判断代码
2010/05/16 PHP
zend api扩展的php对象的autoload工具
2011/04/18 PHP
php中利用explode函数分割字符串到数组
2014/02/08 PHP
php操作MongoDB基础教程(连接、新增、修改、删除、查询)
2014/03/25 PHP
浅谈COOKIE和SESSION区别
2015/07/19 PHP
编写PHP脚本清除WordPress头部冗余代码的方法讲解
2016/03/01 PHP
PHP 极验验证码实例讲解
2016/09/29 PHP
yii2的restful api路由实例详解
2019/05/14 PHP
Thinkphp 3.2框架使用Redis的方法详解
2019/10/24 PHP
js限制textarea每行输入字符串长度的代码
2012/10/31 Javascript
jquery插件validate验证的小例子
2013/05/08 Javascript
JavaScript中的apply和call函数详解
2014/07/20 Javascript
JavaScript仿百度图片浏览效果
2016/11/23 Javascript
jQuery+ajax的资源回收处理机制分析
2017/01/07 Javascript
详解用webpack把我们的业务模块分开打包的方法
2017/07/20 Javascript
浅谈关于JS下大批量异步任务按顺序执行解决方案一点思考
2019/01/08 Javascript
js实现时间日期校验
2020/05/26 Javascript
Python学习资料
2007/02/08 Python
利用一个简单的例子窥探CPython内核的运行机制
2015/03/30 Python
剖析Django中模版标签的解析与参数传递
2015/07/21 Python
Python3 socket同步通信简单示例
2017/06/07 Python
numpy数组拼接简单示例
2017/12/15 Python
解决Python3中的中文字符编码的问题
2018/07/18 Python
Python通用循环的构造方法实例分析
2018/12/19 Python
Python 获取指定文件夹下的目录和文件的实现
2019/08/30 Python
Pytest mark使用实例及原理解析
2020/02/22 Python
python GUI库图形界面开发之PyQt5中QWebEngineView内嵌网页与Python的数据交互传参详细方法实例
2020/02/26 Python
python爬虫学习笔记之Beautifulsoup模块用法详解
2020/04/09 Python
python opencv pytesseract 验证码识别的实现
2020/08/28 Python
html5 postMessage解决跨域、跨窗口消息传递方案
2016/12/20 HTML / CSS
Java面试题及答案
2012/09/08 面试题
小学开学标语
2014/07/01 职场文书
解除聘用合同证明书范本
2014/09/11 职场文书
群众路线教育实践活动学习笔记
2014/11/05 职场文书
2016年中秋节寄语大全
2015/12/07 职场文书
python迷宫问题深度优先遍历实例
2021/06/20 Python