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 相关文章推荐
理解Javascript_10_对象模型
Oct 16 Javascript
javascript event 事件解析
Jan 31 Javascript
JQury slideToggle闪烁问题及解决办法
Jul 05 Javascript
JQuery通过AJAX从后台获取信息显示在表格上并支持行选中
Sep 15 Javascript
javascript作用域链与执行环境详解
Mar 25 Javascript
解决微信二次分享不显示摘要和图片的问题
Aug 18 Javascript
详解Puppeteer 入门教程
May 09 Javascript
vue集成kindeditor富文本的实现示例代码
Jun 07 Javascript
基于jQuery实现挂号平台首页源码
Jan 06 jQuery
node爬取新型冠状病毒的疫情实时动态
Feb 06 Javascript
vue.js实现简单购物车功能
May 30 Javascript
vue+ElementUI 关闭对话框清空验证,清除form表单的操作
Aug 06 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代码覆盖率统计详解
2020/07/22 PHP
Jquery 绑定时间实现代码
2011/05/03 Javascript
JS 控件事件小结
2012/10/31 Javascript
js键盘上下左右键怎么触发function(实例讲解)
2013/12/14 Javascript
javascript中声明函数的方法及调用函数的返回值
2014/07/22 Javascript
JavaScript中输出标签的方法
2014/08/27 Javascript
node.js中的fs.symlink方法使用说明
2014/12/15 Javascript
微信小程序 页面之间传参实例详解
2017/01/13 Javascript
js实现放大镜特效
2017/05/18 Javascript
20170918 前端开发周报之JS前端开发必看
2017/09/18 Javascript
判断jQuery是否加载完成,没完成继续判断的解决方法
2017/12/06 jQuery
详解mpvue开发小程序小总结
2018/07/25 Javascript
Vue-CLI3.x 设置反向代理的方法
2018/12/06 Javascript
vue使用微信扫一扫功能的实现代码
2020/04/11 Javascript
jQuery实现朋友圈查看图片
2020/09/11 jQuery
JavaScript本地储存:localStorage、sessionStorage、cookie的使用
2020/10/13 Javascript
对python中的乘法dot和对应分量相乘multiply详解
2018/11/14 Python
python 将对象设置为可迭代的两种实现方法
2019/01/21 Python
基于python生成器封装的协程类
2019/03/20 Python
python保留小数位的三种实现方法
2020/01/07 Python
python爬取王者荣耀全皮肤的简单实现代码
2020/01/31 Python
Python的pygame安装教程详解
2020/02/10 Python
给 TensorFlow 变量进行赋值的方式
2020/02/10 Python
python使用nibabel和sitk读取保存nii.gz文件实例
2020/07/01 Python
解决Ubuntu18中的pycharm不能调用tensorflow-gpu的问题
2020/09/17 Python
CSS3哪些新特性值得称赞
2016/03/02 HTML / CSS
css3进阶之less实现星空动画的示例代码
2019/09/10 HTML / CSS
HTML5的Geolocation地理位置定位API使用教程
2016/05/12 HTML / CSS
俄罗斯化妆品和香水网上商店:Iledebeaute
2019/01/03 全球购物
三年级语文教学反思
2014/02/01 职场文书
捐款倡议书格式范文
2014/05/14 职场文书
小学生环保倡议书
2014/05/15 职场文书
签字仪式主持词
2015/07/03 职场文书
初中政教处工作总结
2015/08/12 职场文书
美德少年事迹材料(2016推荐版)
2016/02/25 职场文书
Java 超详细讲解IO操作字节流与字符流
2022/03/25 Java/Android