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插件集合
Jan 12 Javascript
js控制表单奇偶行样式的简单方法
Jul 31 Javascript
防止登录页面出现在frame中js代码
Jul 22 Javascript
JavaScript中的object转换函数toString()与valueOf()介绍
Dec 31 Javascript
jquery实现全选、反选、获得所有选中的checkbox
Sep 13 Javascript
Node调用Java的示例代码
Sep 20 Javascript
vue-cli3.0配置及使用注意事项详解
Sep 05 Javascript
详解javascript中的Error对象
Apr 25 Javascript
JQuery+Bootstrap 自定义全屏Loading插件的示例demo
Jul 03 jQuery
ECharts地图绘制和钻取简易接口详解
Jul 12 Javascript
js+HTML5 canvas 实现简单的加载条(进度条)功能示例
Jul 16 Javascript
手写实现JS中的new
Nov 07 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下清空字符串中的HTML标签的代码
2010/09/06 PHP
PHP性能分析工具XHProf安装使用教程
2015/05/13 PHP
使用PHP生成二维码的方法汇总
2015/07/22 PHP
几个有趣的Javascript Hack
2010/07/24 Javascript
js切换div css注意的细节
2012/12/10 Javascript
node.js中的fs.renameSync方法使用说明
2014/12/16 Javascript
jquery中attr和prop的区别分析
2015/03/16 Javascript
JQuery插件jcarousellite的参数中文说明
2015/05/11 Javascript
在JavaScript中使用NaN值的方法
2015/06/05 Javascript
超漂亮的Bootstrap 富文本编辑器summernote
2016/04/05 Javascript
使用bootstrap typeahead插件实现输入框自动补全之问题及解决办法
2016/07/07 Javascript
JS面试题---关于算法台阶的问题
2016/07/26 Javascript
Bootstrap modal使用及点击外部不消失的解决方法
2016/12/13 Javascript
微信小程序实现给循环列表添加点击样式实例
2017/04/26 Javascript
webpack4 处理CSS的方法示例
2018/09/03 Javascript
简单了解Ajax表单序列化的实现方法
2019/06/14 Javascript
基于JavaScript实现简单扫雷游戏
2021/01/02 Javascript
MySQLdb ImportError: libmysqlclient.so.18解决方法
2014/08/21 Python
python实现去除下载电影和电视剧文件名中的多余字符的方法
2014/09/23 Python
python实现批量修改服务器密码的方法
2019/08/13 Python
Python类成员继承重写的实现
2020/09/16 Python
如何使用python-opencv批量生成带噪点噪线的数字验证码
2020/12/21 Python
澳大利亚运动鞋商店:Platypus Shoes
2019/09/27 全球购物
英国比较机场停车场网站:Airport Parking Essentials
2019/12/01 全球购物
哥伦比亚加拿大官网:Columbia Sportswear Canada
2020/09/07 全球购物
描述JSP和Servlet的区别、共同点、各自应用的范围
2012/10/02 面试题
财务主管自我鉴定
2014/01/17 职场文书
彩色的非洲教学反思
2014/02/18 职场文书
《九寨沟》教学反思
2014/04/08 职场文书
2014年小学德育工作总结
2014/12/05 职场文书
清明祭英烈活动总结
2015/05/11 职场文书
党支部半年考察意见
2015/06/01 职场文书
nginx proxy_cache 缓存配置详解
2021/03/31 Servers
python状态机transitions库详解
2021/06/02 Python
Mysql忘记密码解决方法
2022/02/12 MySQL
python开发人人对战的五子棋小游戏
2022/05/02 Python