也说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 相关文章推荐
THREE.JS入门教程(2)着色器-上
Jan 24 Javascript
Javascript通过overflow控制列表闭合与展开的方法
May 15 Javascript
jQuery实现的自动加载页面功能示例
Sep 04 Javascript
JS实现倒计时(天数、时、分、秒)
Nov 16 Javascript
Jquery删除css属性的简单方法
Dec 04 Javascript
node.js 用socket实现聊天的示例代码
Oct 17 Javascript
Angular4.x通过路由守卫进行路由重定向实现根据条件跳转到相应的页面(推荐)
May 10 Javascript
原生JS实现列表子元素顺序反转的方法分析
Jul 02 Javascript
vue中各种通信传值方式总结
Feb 14 Javascript
vue实现手机端省市区区域选择
Sep 27 Javascript
webpack 最佳配置指北(推荐)
Jan 07 Javascript
JS替换字符串中指定位置的字符(多种方法)
May 28 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
如何使用jQuery+PHP+MySQL来实现一个在线测试项目
2015/04/26 PHP
PHP利用Mysql锁解决高并发的方法
2018/09/04 PHP
判断是否输入完毕再激活提交按钮
2006/06/26 Javascript
javascript基于jQuery的表格悬停变色/恢复,表格点击变色/恢复,点击行选Checkbox
2008/08/05 Javascript
javascript 中设置window.location.href跳转无效问题解决办法
2017/02/09 Javascript
svg动画之动态描边效果
2017/02/22 Javascript
AngularJS前端页面操作之用户修改密码功能示例
2017/03/27 Javascript
jquery.uploadView 实现图片预览上传功能
2017/08/10 jQuery
JS实现可针对算术表达式求值的计算器功能示例
2018/09/04 Javascript
Django+vue跨域问题解决的详细步骤
2019/01/20 Javascript
深入理解JavaScript 箭头函数
2019/05/30 Javascript
python 自动化将markdown文件转成html文件的方法
2016/09/23 Python
更新pip3与pyttsx3文字语音转换的实现方法
2019/08/08 Python
Pandas+Matplotlib 箱式图异常值分析示例
2019/12/09 Python
python字典setdefault方法和get方法使用实例
2019/12/25 Python
用python实现前向分词最大匹配算法的示例代码
2020/08/06 Python
Python爬虫开发与项目实战
2020/12/16 Python
Ray-Ban雷朋西班牙官网:全球领先的太阳眼镜品牌
2018/11/28 全球购物
三星法国官方网站:Samsung法国
2019/10/31 全球购物
屈臣氏越南官网:Watsons越南
2021/01/14 全球购物
介绍一下SQL注入攻击的种类和防范手段
2012/02/18 面试题
Static Nested Class 和 Inner Class的不同
2013/11/28 面试题
会计主管岗位职责范文
2013/11/08 职场文书
出纳岗位职责模板
2013/11/27 职场文书
写给妈妈的道歉信
2014/01/11 职场文书
解除合同协议书
2014/04/17 职场文书
班干部竞选演讲稿
2014/04/24 职场文书
2014四风问题对照检查材料范文
2014/09/15 职场文书
2014标准社保办理委托书
2014/10/06 职场文书
工作时间调整通知
2015/04/24 职场文书
厉行节约工作总结
2015/08/12 职场文书
男方家长婚礼答谢词
2015/09/29 职场文书
公司转让协议书
2016/03/19 职场文书
《水浒传》读后感3篇(范文)
2019/09/19 职场文书
Laravel中获取IP的真实地理位置
2021/04/01 PHP
详解Vue的列表渲染
2021/11/20 Vue.js