也说JavaScript中String类的replace函数


Posted in Javascript onSeptember 22, 2011

对回调函数的参数说明也很准确:
第一个参数是匹配到的字符串,最后一个是原字符串,倒数第二个参数是匹配到的字符串的在原字符串索引的起始位。
但我很好奇,第二到倒数第三之间的参数又是些什么呢?其实,W3school已经给出了答案:

replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。其语法为: 
stringObject.replace(regexp/substr,replacement) 
replacement 可以是字符串,也可以是函数。如果它是字符串,那么每个匹配都将由字符串替换。 
ECMAScript v3 规定,replace() 方法的参数 replacement 可以是函数而不是字符串。在这种情况下,每个匹配都调用该函 
数,它返回的字符串将作为替换文本使用。该函数的第一个参数是匹配模式的字符串。接下来的参数是与模式中的子表达式匹配的 
字符串,可以有 0 个或多个这样的参数。接下来的参数是一个整数,声明了匹配在 stringObject 中出现的位置。最后一个参数 
是 stringObject 本身。

显然,replacement函数的第二到倒数第三之间的参数是“与模式中的子表达式匹配的字符串”,具体个数起决于子表达式的个数。
据此,我们举两个例子来对比说明:
例1:
字符串:"CJ9080"
匹配模式为:/CJ[0-9]{2}/g (无子表达式)
预期结果:
replacement函数有3个参数,分别为:
【0】“CJ90”
【1】0
【2】“CJ9080”
测试代码:
function replaceStr(s) { 
return s.replace(/CJ[0-9]{2}/g, 
function(){ 
for (var i = 0, len = arguments.length; i < len; i++) { 
console.info("Argument " + i + ": " + arguments[i]); 
} 
}); 
};

运行结果:

也说JavaScript中String类的replace函数


例2:
字符串:"CJ9080"
匹配模式为:/((CJ)([0-9]{2}))/g (有3个子表达式:(CJ[0-9]{2}), (CJ), ([0-9]{2}))
预期结果:
replacement函数有6个参数,分别为:
【0】 "CJ90"
【1】 "CJ90"
【2】 "CJ"
【3】 "90"
【4】 0
【5】 "CJ9080"
测试代码:
function replaceStr(s) { 
return s.replace(/((CJ)([0-9]{2}))/g, 
function(){ 
for (var i = 0, len = arguments.length; i < len; i++) { 
console.info("Argument " + i + ": " + arguments[i]); 
} 
}); 
};

运行结果:

也说JavaScript中String类的replace函数


显然,两个测试例子结果均与预期一致。说明,当replace函数的replacement为函数时,此函数的参数各位确如W3school所言:

【0】:匹配模式的字符串;
【1 - (length - 3)】: 与模式中的子表达式匹配的字符串, 0个或多个;
【length - 2】:匹配串在原字符串的索引起始位置,从0开始;
【length - 1】:原字符串。

Javascript 相关文章推荐
js prototype 格式化数字 By shawl.qiu
Apr 02 Javascript
WEB页子窗口(showModalDialog和showModelessDialog)使用说明
Oct 25 Javascript
JavaScript多线程详解
Aug 12 Javascript
15个常用的jquery代码片段
Dec 19 Javascript
Jquery判断form表单数据是否变化
Mar 30 Javascript
Vue.js实现无限加载与分页功能开发
Nov 03 Javascript
Vue.extend构造器的详解
Jul 17 Javascript
详解基于Vue+Koa的pm2配置
Oct 24 Javascript
vue实现的上传图片到数据库并显示到页面功能示例
Mar 17 Javascript
JavaScript多态与封装实例分析
Jul 27 Javascript
javascript for循环性能测试示例
Aug 07 Javascript
浅谈vuex中store的命名空间
Nov 08 Javascript
javascript笔记 String类replace函数的一些事
Sep 22 #Javascript
Prototype的Class.create函数解析
Sep 22 #Javascript
Javascript中的this绑定介绍
Sep 22 #Javascript
StringTemplate遇见jQuery冲突的解决方法
Sep 22 #Javascript
jquery实现的让超出显示范围外的导航自动固定屏幕最顶上
Sep 22 #Javascript
javascript代码编写需要注意的7个小细节小结
Sep 21 #Javascript
extjs 初始化checkboxgroup值的代码
Sep 21 #Javascript
You might like
简单实现限定phpmyadmin访问ip的方法
2013/03/05 PHP
Smarty局部缓存的几种方法简介
2014/06/17 PHP
Yii统计不同类型邮箱数量的方法
2016/10/18 PHP
实现变速回到顶部的JavaScript代码
2011/05/09 Javascript
Firefox/Chrome/Safari的中可直接使用$/$$函数进行调试
2012/02/13 Javascript
jquery实现网站超链接和图片提示效果
2013/03/21 Javascript
JavaScript网页定位详解
2014/01/13 Javascript
jq实现酷炫的鼠标经过图片翻滚效果
2014/03/12 Javascript
js时间日期格式化封装函数
2014/12/02 Javascript
javascript文本模板用法实例
2015/07/31 Javascript
结合代码图文讲解JavaScript中的作用域与作用域链
2016/07/05 Javascript
jQuery.cookie.js实现记录最近浏览过的商品功能示例
2017/01/23 Javascript
原生js实现轮播图
2017/02/27 Javascript
使用ef6创建oracle数据库的实体模型遇到的问题及解决方案
2017/11/09 Javascript
angularJs select绑定的model取不到值的解决方法
2018/10/08 Javascript
详解Vue2.5+迁移至Typescript指南
2019/08/01 Javascript
微信小程序实现注册登录功能(表单校验、错误提示)
2019/12/10 Javascript
解决vue+elementui项目打包后样式变化问题
2020/08/03 Javascript
[03:04]DOTA2超级联赛专访ZSMJ “莫名其妙”的逆袭
2013/05/23 DOTA
在python3.5中使用OpenCV的实例讲解
2018/04/02 Python
python使用RNN实现文本分类
2018/05/24 Python
Python爬虫:将headers请求头字符串转为字典的方法
2019/08/21 Python
jupyter 使用Pillow包显示图像时inline显示方式
2020/04/24 Python
pycharm配置python 设置pip安装源为豆瓣源
2021/02/05 Python
阿迪达斯意大利在线商店:adidas意大利
2016/09/19 全球购物
大学生四个方面的自我评价
2013/09/19 职场文书
专业实习自我鉴定
2013/10/29 职场文书
计算机应用职专应届生求职信
2013/11/12 职场文书
营销人才自我鉴定范文
2013/12/25 职场文书
成功的餐厅经营创业计划书
2014/01/15 职场文书
十八届三中全会感言
2014/03/10 职场文书
竞选班长演讲稿400字
2014/08/22 职场文书
2014年教师节座谈会发言稿
2014/09/10 职场文书
干部四风问题整改措施思想汇报
2014/10/13 职场文书
考博导师推荐信范文
2015/03/27 职场文书
《悬崖边的树》读后感2篇
2019/12/02 职场文书