也说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 相关文章推荐
如何将一个String和多个String值进行比较思路分析
Apr 22 Javascript
纯js实现重发验证码按钮倒数功能
Apr 21 Javascript
jquery+css3实现会动的小圆圈效果
Jan 27 Javascript
JS如何生成一个不重复的ID的函数
Dec 25 Javascript
JS中Array数组学习总结
Jan 18 Javascript
jquery pagination分页插件使用详解(后台struts2)
Jan 22 Javascript
React应用中使用Bootstrap的方法
Aug 15 Javascript
详解angularjs popup-table 弹出框表格指令
Sep 20 Javascript
关于redux-saga中take使用方法详解
Feb 27 Javascript
微信开发之企业付款到银行卡接口开发的示例代码
Sep 18 Javascript
聊聊Vue 中 title 的动态修改问题
Jun 11 Javascript
js实现html滑动图片拼图验证
Jun 24 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
基于PHP的简单采集数据入库程序【续篇】
2014/07/30 PHP
PHP中浮点数计算比较及取整不准确的解决方法
2015/01/09 PHP
wamp服务器访问php非常缓慢的解决过程
2015/07/01 PHP
PHP实现简单实用的验证码类
2015/07/29 PHP
PHP预定义变量9大超全局数组用法详解
2016/04/23 PHP
Yii2实现同时搜索多个字段的方法
2016/08/10 PHP
yii2实现 &quot;上一篇,下一篇&quot; 功能的代码实例
2017/02/04 PHP
关于Laravel参数验证的一些疑与惑
2019/11/19 PHP
json简单介绍
2008/06/10 Javascript
Extjs Ajax 乱码问题解决方案
2009/04/15 Javascript
onmouseover和onmouseout的一些问题思考
2013/08/14 Javascript
js实现同一页面多个运动效果的方法
2015/04/10 Javascript
javascript完美实现给定日期返回上月日期的方法
2017/06/15 Javascript
jquery easyui如何实现格式化列
2017/07/30 jQuery
angularjs利用directive实现移动端自定义软键盘的示例
2017/09/20 Javascript
jQuery+Datatables实现表格批量删除功能【推荐】
2018/10/24 jQuery
详解jQuery-each()方法
2019/03/13 jQuery
小程序实现日历左右滑动效果
2019/10/21 Javascript
详解Angular cli配置过程记录
2019/11/07 Javascript
JavaScript监听键盘事件代码实现
2020/06/03 Javascript
Python深入学习之对象的属性
2014/08/31 Python
Python如何生成树形图案
2018/01/03 Python
简述Python2与Python3的不同点
2018/01/21 Python
python实现按关键字筛选日志文件
2019/12/24 Python
Python之关于类变量的两种赋值区别详解
2020/03/12 Python
英国珠宝和手表专家:Pleasance & Harper
2020/10/21 全球购物
总结表彰大会主持词
2014/03/26 职场文书
小学生母亲节演讲稿
2014/05/07 职场文书
霸气队列口号
2014/06/18 职场文书
就业协议书范本
2014/10/08 职场文书
商家认证委托书格式
2014/10/16 职场文书
投标承诺函范文
2015/01/21 职场文书
2015初一年级组工作总结
2015/07/24 职场文书
描述鲁迅的名言整理,一生受用
2019/08/08 职场文书
java代码实现空间切割
2022/01/18 Java/Android
Vue组件更新数据v-model不生效的解决
2022/04/02 Vue.js