也说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 相关文章推荐
我遇到的参数传递中 双引号单引号嵌套问题
Feb 11 Javascript
JSON 教程 json入门学习笔记
Sep 22 Javascript
自己封装的常用javascript函数分享
Jan 07 Javascript
Jquery ajax 同步阻塞引起的UI线程阻塞问题
Nov 17 Javascript
基于javascript实现tab选项卡切换特效调试笔记
Mar 30 Javascript
javascript设置文本框光标的方法实例小结
Nov 04 Javascript
浅谈移动端之js touch事件 手势滑动事件
Nov 07 Javascript
Bootstrap CSS组件之面包屑导航(breadcrumb)
Dec 17 Javascript
Vue实例简单方法介绍
Jan 20 Javascript
JS验证字符串功能
Feb 22 Javascript
js 提取某()特殊字符串长度的实例
Dec 06 Javascript
原生js实现轮播图特效
May 04 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读取xml方法介绍
2013/01/12 PHP
PHP通过加锁实现并发情况下抢码功能
2016/08/10 PHP
关于PHP转换超过2038年日期出错的问题解决
2017/06/28 PHP
childNodes.length与children.length的区别
2009/05/14 Javascript
javascript实现tabs选项卡切换效果(扩展版)
2013/03/19 Javascript
JavaScript SetInterval与setTimeout使用方法详解
2013/11/15 Javascript
jquery自动切换tabs选项卡的具体实现
2013/12/24 Javascript
jQuery将所有被选中的checkbox某个属性值连接成字符串的方法
2015/01/24 Javascript
JavaScript模拟可展开、拖动与关闭的聊天窗口实例
2015/05/12 Javascript
JavaScript脚本判断蜘蛛来源的方法
2015/09/22 Javascript
javascript RegExp 使用说明
2016/05/21 Javascript
用原生js统计文本行数的简单示例
2016/08/19 Javascript
前端js实现文件的断点续传 后端PHP文件接收
2016/10/14 Javascript
Bootstrap 3浏览器兼容性问题及解决方案
2017/04/11 Javascript
vue 2.0封装model组件的方法
2017/08/03 Javascript
详解Express笔记之动态渲染HTML(新手入坑)
2018/12/13 Javascript
教你如何用Node实现API的转发(某音乐)
2019/09/20 Javascript
JS正则表达式验证端口范围(0-65535)
2020/01/06 Javascript
vue 弹出遮罩层样式实例
2020/07/22 Javascript
在Python中处理日期和时间的基本知识点整理汇总
2015/05/22 Python
Python中逗号的三种作用实例分析
2015/06/08 Python
Python中死锁的形成示例及死锁情况的防止
2016/06/14 Python
python编程实现随机生成多个椭圆实例代码
2018/01/03 Python
django输出html内容的实例
2018/05/27 Python
Django Rest framework三种分页方式详解
2019/07/26 Python
对Django中的权限和分组管理实例讲解
2019/08/16 Python
Python 可变类型和不可变类型及引用过程解析
2019/09/27 Python
西班牙第一的网上药房:PromoFarma.com
2017/04/17 全球购物
印度尼西亚最好的小工具在线商店:Erafone.com
2019/03/26 全球购物
英国泽西岛植物:Jersey Plants Direct
2019/08/07 全球购物
行政工作个人的自我评价
2014/02/13 职场文书
毕业留言寄语大全
2014/04/10 职场文书
应聘教师求职信
2014/07/19 职场文书
考试作弊检讨
2015/01/27 职场文书
小学生暑假安全公约
2015/07/14 职场文书
2019个人半年工作总结
2019/06/21 职场文书