也说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 options属性集合操作代码
Dec 28 Javascript
js中关于一个分号的崩溃示例
Nov 11 Javascript
javascript新建标签,判断键盘输入,以及判断焦点(示例代码)
Nov 25 Javascript
利用javascript判断文件是否存在
Dec 31 Javascript
node.js入门教程迷你书、node.js入门web应用开发完全示例
Apr 06 Javascript
node.js中的fs.chownSync方法使用说明
Dec 16 Javascript
JavaScript制作颜色反转小游戏
Sep 25 Javascript
微信小程序 页面跳转传值实现代码
Jul 27 Javascript
JavaScript获取移动设备型号的实现代码(JS获取手机型号和系统)
Mar 10 Javascript
node.js爬取中关村的在线电瓶车信息
Nov 13 Javascript
JS函数进阶之继承用法实例分析
Jan 15 Javascript
vue 动态组件(component :is) 和 dom元素限制(is)用法说明
Sep 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脚本的10个技巧(8)
2006/10/09 PHP
PHP获取一年有几周以及每周开始日期和结束日期
2015/08/06 PHP
ThinkPHP框架结合Ajax实现用户名校验功能示例
2019/07/03 PHP
JS解密入门 最终变量劫持
2008/06/25 Javascript
js 单击式的下拉菜单效果实例
2013/08/13 Javascript
让网页跳转到指定位置的jquery代码非书签
2013/09/06 Javascript
刷新页面的几种方法小结(JS,ASP.NET)
2014/01/07 Javascript
Flexigrid在IE下不显示数据的有效处理方法
2014/09/04 Javascript
JavaScript中string转换成number介绍
2014/12/31 Javascript
jquery简单实现外部链接用新窗口打开的方法
2015/05/30 Javascript
原生js和jQuery实现淡入淡出轮播效果
2015/12/25 Javascript
Bootstrap中CSS的使用方法
2016/02/17 Javascript
基于JavaScript实现图片剪切效果
2017/03/07 Javascript
JavaScript事件对象event用法分析
2018/07/27 Javascript
原生javascript实现连连看游戏
2019/01/03 Javascript
微信小程序实现图片上传
2019/05/23 Javascript
使用vue实现各类弹出框组件
2019/07/03 Javascript
[01:10]DOTA2英雄背景故事第四期之混沌法则混沌骑士
2020/07/16 DOTA
python实现猜数字游戏(无重复数字)示例分享
2014/03/29 Python
Python中的异常处理简明介绍
2015/04/13 Python
python3操作微信itchat实现发送图片
2018/02/24 Python
火车票抢票python代码公开揭秘!
2018/03/08 Python
Python 中使用 PyMySQL模块操作数据库的方法
2019/11/10 Python
python3中关于excel追加写入格式被覆盖问题(实例代码)
2020/01/10 Python
Python内建序列通用操作6种实现方法
2020/03/26 Python
Python类中的装饰器在当前类中的声明与调用详解
2020/04/15 Python
Canvas与Image互相转换示例代码
2013/08/09 HTML / CSS
俄罗斯运动鞋商店:Sneakerhead
2018/05/10 全球购物
俄罗斯宠物用品网上商店:ZooMag
2019/12/12 全球购物
精选干货:Java精选笔试题附答案
2014/01/18 面试题
大学生毕业求职的自我评价
2013/09/29 职场文书
历史专业毕业生的自我鉴定
2013/11/15 职场文书
材料加工工程求职信
2014/02/19 职场文书
最常使用的求职信
2014/05/25 职场文书
化学专业毕业生求职信
2014/07/28 职场文书
详解Java七大阻塞队列之SynchronousQueue
2021/09/04 Java/Android