也说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 相关文章推荐
激活 ActiveX 控件
Oct 09 Javascript
js鼠标左右键 键盘值小结
Jun 11 Javascript
关于ExtJS4.1:快捷键支持的问题
Apr 24 Javascript
Jquery 分页插件之Jquery Pagination
Aug 25 Javascript
js内置对象处理_打印学生成绩单的简单实现
Sep 24 Javascript
原生js轮播(仿慕课网)
Feb 15 Javascript
Vue 项目中遇到的跨域问题及解决方法(后台php)
Mar 28 Javascript
修改npm全局安装模式的路径方法
May 15 Javascript
对vuejs的v-for遍历、v-bind动态改变值、v-if进行判断的实例讲解
Aug 27 Javascript
js实现延迟加载的几种方法详解
Jan 19 Javascript
微信小程序人脸识别功能代码实例
May 07 Javascript
详解使用mocha对webpack打包的项目进行&quot;冒烟测试&quot;的大致流程
Apr 27 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自动更新新闻DIY
2006/10/09 PHP
php实现文件下载代码分享
2014/08/19 PHP
Yii实现MySQL多数据库和读写分离实例分析
2014/12/03 PHP
浅谈php的优缺点
2015/07/14 PHP
100多行PHP代码实现socks5代理服务器[2]
2016/05/05 PHP
JavaScript 申明函数的三种方法 每个函数就是一个对象(一)
2009/12/04 Javascript
JAVASCRIPT实现的WEB页面跳转以及页面间传值方法
2010/05/13 Javascript
使用Jquery来实现可以输入值的下拉选单 雏型
2011/12/06 Javascript
jquery使用slideDown实现模块缓慢拉出效果的方法
2015/03/27 Javascript
jQuery实现复选框批量选择与反选的方法
2015/06/17 Javascript
Jquery表单验证失败后不提交的解决方法
2016/10/18 Javascript
从零学习node.js之搭建http服务器(二)
2017/02/21 Javascript
js实现倒计时效果(小于10补零)
2017/03/08 Javascript
利用webstrom调试Vue.js单页面程序的方法教程
2017/06/06 Javascript
VUE2.0中Jsonp的使用方法
2018/05/22 Javascript
一个Vue视频媒体多段裁剪组件的实现示例
2018/08/09 Javascript
Vue组件为什么data必须是一个函数
2020/06/11 Javascript
基于ant design日期控件使用_仅月份的操作
2020/10/27 Javascript
python检查指定文件是否存在的方法
2015/07/06 Python
用Python登录好友QQ空间点赞的示例代码
2017/11/04 Python
解决tensorflow测试模型时NotFoundError错误的问题
2018/07/27 Python
Flask教程之重定向与错误处理实例分析
2019/08/01 Python
python 写函数在一定条件下需要调用自身时的写法说明
2020/06/01 Python
去除python中的字符串空格的简单方法
2020/12/22 Python
css3之UI元素状态伪类选择器实例演示
2017/08/11 HTML / CSS
viagogo法国票务平台:演唱会、体育比赛、戏剧门票
2017/03/27 全球购物
Theo + George官方网站:都柏林时尚品牌
2019/04/08 全球购物
SQL数据库笔试题
2016/03/08 面试题
毕业生个人求职的自我评价
2013/10/28 职场文书
大型主题婚礼活动策划方案
2014/09/15 职场文书
领导班子四风对照检查材料思想汇报
2014/09/26 职场文书
文明礼仪主题班会
2015/08/13 职场文书
爱岗敬业事迹材料
2019/06/20 职场文书
PostgreSQL存储过程实用脚本(二):创建函数入门
2021/04/05 PostgreSQL
PyTorch的Debug指南
2021/05/07 Python
PYTHON基于Pyecharts绘制常见的直角坐标系图表
2022/04/28 Python