也说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 相关文章推荐
jquery实现显示已选用户
Jul 21 Javascript
基于javascript如何传递特殊字符
Nov 30 Javascript
深入理解JavaScript定时机制
Oct 27 Javascript
js中DOM三级列表(代码分享)
Mar 20 Javascript
js轮播图的插件化封装详解
Jul 17 Javascript
vue-router重定向不刷新问题的解决
Jun 25 Javascript
JS实现仿微信支付弹窗功能
Jun 25 Javascript
vue 2.8.2版本配置刚进入时候的默认页面方法
Sep 21 Javascript
vue用BMap百度地图实现即时搜索功能
Sep 26 Javascript
JS实现transform实现扇子效果
Jan 17 Javascript
Ant-design-vue Table组件customRow属性的使用说明
Oct 28 Javascript
JavaScript数组 几个常用方法总结
Nov 11 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小偷的核心程序
2007/04/09 PHP
PHP随机生成随机个数的字母组合示例
2014/01/14 PHP
php中将一段数据存到一个txt文件中并显示其内容
2014/08/15 PHP
Apache PHP MySql安装配置图文教程
2016/08/27 PHP
PHP常用字符串输出方法分析(echo,print,printf及sprintf)
2021/03/09 PHP
基于jQuery的试卷自动排版系统实现代码
2011/01/06 Javascript
javascript继承之为什么要继承
2012/11/10 Javascript
js 采用delete实现继承示例代码
2014/05/20 Javascript
JavaScript中函数(Function)的apply与call理解
2015/07/08 Javascript
JS实现自定义简单网页软键盘效果代码
2015/11/05 Javascript
基于JavaScript实现动态创建表格和增加表格行数
2015/12/20 Javascript
JavaScript中关联原型链属性特性
2016/02/13 Javascript
jquery mobile界面数据刷新的实现方法
2016/05/28 Javascript
jQuery内容过滤选择器用法示例
2016/09/09 Javascript
jQuery实现的简单悬浮层功能完整实例
2017/01/23 Javascript
了解前端理论:rscss和rsjs
2019/05/23 Javascript
Javascript执行流程细节原理解析
2020/05/14 Javascript
从零开始在vue-cli4配置自适应vw布局的实现
2020/06/08 Javascript
vuex存取值和映射函数使用说明
2020/07/24 Javascript
Python实现随机漫步功能
2018/07/09 Python
python实现两张图片的像素融合
2019/02/23 Python
使用Python和Prometheus跟踪天气的使用方法
2019/05/06 Python
Pycharm 文件更改目录后,执行路径未更新的解决方法
2019/07/19 Python
Python 使用list和tuple+条件判断详解
2019/07/30 Python
Python中断多重循环的几种方式详解
2020/02/10 Python
Python小白学习爬虫常用请求报头
2020/06/03 Python
Python叠加矩形框图层2种方法及效果
2020/06/18 Python
传播学专业毕业生自荐信
2013/11/04 职场文书
求职意向书范文
2014/04/01 职场文书
我的求职择业计划书
2014/04/04 职场文书
泰山导游词
2015/02/02 职场文书
2015年会计工作总结范文
2015/05/26 职场文书
九不准学习心得体会
2016/01/23 职场文书
安装pytorch时报sslerror错误的解决方案
2021/05/17 Python
Python OpenCV 彩色与灰度图像的转换实现
2021/06/05 Python
MySQL sql模式设置引起的问题
2022/05/15 MySQL