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 相关文章推荐
JS面向对象、prototype、call()、apply()
May 14 Javascript
js onload事件不起作用示例分析
Oct 09 Javascript
JS实现距离上次刷新已过多少秒示例
May 23 Javascript
Bootstrap使用基础教程详解
Sep 05 Javascript
jquery自定义表单验证插件
Oct 12 Javascript
bootstrap table分页模板和获取表中的ID方法
Jan 10 Javascript
jQuery模拟窗口抖动效果
Mar 15 Javascript
详解Vue 实例中的生命周期钩子
Mar 21 Javascript
详解webpack2+node+react+babel实现热加载(hmr)
Aug 24 Javascript
快速理解 JavaScript 中的 LHS 和 RHS 查询的用法
Aug 24 Javascript
解决vue打包项目后刷新404的问题
Mar 06 Javascript
vue 基于element-ui 分页组件封装的实例代码
Dec 10 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
二十行语句实现从Excel到mysql的转化
2006/10/09 PHP
PHP判断图片格式的七种方法小结
2013/06/03 PHP
如何用php获取文件名后缀
2013/06/09 PHP
二进制交叉权限微型php类分享
2014/02/07 PHP
php+redis消息队列实现抢购功能
2018/02/08 PHP
thinkPHP5.1框架使用SemanticUI实现分页功能示例
2019/08/03 PHP
网页和浏览器兼容性问题汇总(draft1)
2009/06/01 Javascript
js函数在frame中的相互调用详解
2014/03/03 Javascript
简介JavaScript中用于处理正切的Math.tan()方法
2015/06/15 Javascript
详解js跨域原理以及2种解决方案
2015/12/09 Javascript
JavaScript字符串常用的方法
2016/03/10 Javascript
JS基础随笔(菜鸟必看篇)
2016/07/13 Javascript
同步异步动态引入js文件的几种方法总结
2016/09/23 Javascript
jQuery和JavaScript节点插入元素的方法对比
2016/11/18 Javascript
vue-resource 拦截器使用详解
2017/02/21 Javascript
使用jQuery监听扫码枪输入并禁止手动输入的实现方法(推荐)
2017/03/21 jQuery
vue-cli之router基本使用方法详解
2017/10/17 Javascript
js获取html页面代码中图片地址的实现代码
2018/03/05 Javascript
npm scripts 使用指南详解
2018/10/08 Javascript
Vue 实现显示/隐藏层的思路(加全局点击事件)
2019/12/31 Javascript
jquery实现点击左右按钮切换图片
2021/01/27 jQuery
[00:15]TI9地铁玩家打卡
2019/08/11 DOTA
Python中列表元素转为数字的方法分析
2016/06/14 Python
使用django-crontab实现定时任务的示例
2018/02/26 Python
Python元组拆包和具名元组解析实例详解
2018/03/26 Python
Python3实现对列表按元组指定列进行排序的方法分析
2018/12/22 Python
对Python3使运行暂停的方法详解
2019/02/18 Python
最简单的matplotlib安装教程(小白)
2020/07/28 Python
CSS3实现翘边的阴影效果的代码示例
2016/06/13 HTML / CSS
维多利亚的秘密官方旗舰店:VICTORIA’S SECRET
2018/04/02 全球购物
计算机数据库专业职业生涯规划书
2014/02/08 职场文书
大学生工作自荐书
2014/06/16 职场文书
世界遗产的导游词
2015/02/13 职场文书
2015年家长学校工作总结
2015/04/22 职场文书
golang 如何用反射reflect操作结构体
2021/04/28 Golang
sql查询结果列拼接成逗号分隔的字符串方法
2021/05/25 SQL Server