也说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 相关文章推荐
Javascript中的window.event.keyCode使用介绍
Apr 26 Javascript
Javascript基础教程之while语句
Jan 18 Javascript
js实现跨域的多种方法
Dec 25 Javascript
js实现select二级联动下拉菜单
Apr 17 Javascript
JS hashMap实例详解
May 26 Javascript
详解vue之页面缓存问题(基于2.0)
Jan 10 Javascript
Vue.js bootstrap前端实现分页和排序
Mar 10 Javascript
jQuery中clone()函数实现表单中增加和减少输入项
May 13 jQuery
javascript+html5+css3自定义提示窗口
Jun 21 Javascript
vue打包相关细节整理(小结)
Sep 28 Javascript
微信小程序实现打卡日历功能
Sep 21 Javascript
前端vue+express实现文件的上传下载示例
Feb 18 Vue.js
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
一个典型的PHP分页实例代码分享
2011/07/28 PHP
PHP 双链表(SplDoublyLinkedList)简介和使用实例
2015/05/12 PHP
Cygwin中安装PHP方法步骤
2015/07/04 PHP
PHP中SQL查询语句的id=%d解释(推荐)
2016/12/10 PHP
jquery与google map api结合使用 控件,监听器
2010/03/04 Javascript
js 居中漂浮广告
2010/03/21 Javascript
用Mootools获得操作索引的两种方法分享
2011/12/12 Javascript
Jquery实现自定义弹窗示例
2014/03/12 Javascript
jquery获取当前日期的方法
2015/01/14 Javascript
JavaScript实现下拉菜单的显示和隐藏
2016/01/05 Javascript
基于JS代码实现图片在页面中旋转效果
2016/06/16 Javascript
前端设计师们最常用的JS代码汇总
2016/09/25 Javascript
javascript算法之二叉搜索树的示例代码
2017/09/12 Javascript
浅谈Vue的加载顺序探讨
2017/10/25 Javascript
vue中,在本地缓存中读写数据的方法
2018/09/21 Javascript
[50:28]LGD女子学院第三期 DOTA2复仇之魂教学
2013/12/24 DOTA
快速了解python leveldb
2018/01/18 Python
详谈在flask中使用jsonify和json.dumps的区别
2018/03/26 Python
Django中使用Whoosh进行全文检索的方法
2019/03/31 Python
python实现微信小程序用户登录、模板推送
2019/08/28 Python
使用Python给头像加上圣诞帽或圣诞老人小图标附源码
2019/12/25 Python
python实现将字符串中的数字提取出来然后求和
2020/04/02 Python
Python浮点型(float)运算结果不正确的解决方案
2020/09/22 Python
国际商务系学生个人的自我评价
2013/11/26 职场文书
个人自荐信
2013/12/05 职场文书
七一表彰活动方案
2014/01/18 职场文书
创建文明学校实施方案
2014/03/11 职场文书
一帮一活动总结
2014/05/08 职场文书
祖国在我心中演讲稿600字
2014/09/23 职场文书
2014年教师德育工作总结
2014/11/10 职场文书
优秀班集体事迹材料
2014/12/25 职场文书
高三毕业评语
2014/12/31 职场文书
2015年工程师工作总结
2015/04/30 职场文书
K8s部署发布Golang应用程序的实现方法
2021/07/16 Golang
Nginx流量拷贝ngx_http_mirror_module模块使用方法详解
2022/04/07 Servers
MySQL的存储过程和相关函数
2022/04/26 MySQL