也说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 相关文章推荐
ASP.NET jQuery 实例8 (动态添加内容到DropDownList)
Feb 03 Javascript
使用javascript过滤html的字符串(注释标记法)
Jul 08 Javascript
js获取或设置当前窗口url参数的小例子
Oct 14 Javascript
JS获取各种浏览器窗口大小的方法
Jan 14 Javascript
Javascript MVC框架Backbone.js详解
Sep 18 Javascript
get(0).tagName获得作用标签示例代码
Oct 08 Javascript
JavaScript获取网页中第一个链接ID的方法
Apr 03 Javascript
JavaScript中的this使用详解
Jul 27 Javascript
简单谈谈require模块化jquery和angular的问题
Jun 23 jQuery
JavaScript简单实现的仿微博留言功能示例
Jan 17 Javascript
浅谈Vue3.0之前你必须知道的TypeScript实战技巧
Sep 11 Javascript
微信小程序indexOf的替换方法(推荐)
Jan 14 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基于MySQL数据库实现对象持久层的方法
2015/06/17 PHP
JavaScript实现删除电脑的关机键
2016/07/26 PHP
thinkphp5.0整合phpsocketio完整攻略(绕坑)
2018/10/12 PHP
Add a Picture to a Microsoft Word Document
2007/06/15 Javascript
自写的一个jQuery圆角插件
2010/10/26 Javascript
jQuery实战之仿淘宝商城左侧导航效果
2011/04/12 Javascript
JavaScript分页功能的实现方法
2015/04/25 Javascript
chrome浏览器当表单自动填充时如何去除浏览器自动添加的默认样式
2015/10/09 Javascript
JavaScript下的时间格式处理函数Date.prototype.format
2016/01/27 Javascript
JS实现CheckBox复选框全选、不选或全不选功能
2020/07/28 Javascript
JavaScript中concat复制数组方法浅析
2019/01/20 Javascript
详解用JS添加和删除class类名
2019/03/25 Javascript
LayUi使用switch开关,动态的去控制它是否被启用的方法
2019/09/21 Javascript
jQuery与原生JavaScript选择HTML元素集合用法对比分析
2019/11/26 jQuery
JS中this的4种绑定规则详解
2020/02/04 Javascript
python二叉树遍历的实现方法
2013/11/21 Python
Python使用filetype精确判断文件类型
2017/07/02 Python
Python实现判断一个字符串是否包含子串的方法总结
2017/11/21 Python
Python字典的基本用法实例分析【创建、增加、获取、修改、删除】
2019/03/05 Python
如何使用Python实现自动化水军评论
2019/06/26 Python
python障碍式期权定价公式
2019/07/19 Python
python 检查数据中是否有缺失值,删除缺失值的方式
2019/12/02 Python
Python读取二进制文件代码方法解析
2020/06/22 Python
python三引号如何输入
2020/07/06 Python
css3中的calc函数浅析
2018/07/10 HTML / CSS
巴西女装购物网站:Eclectic
2018/04/24 全球购物
印度民族服装购物网站:BIBA
2019/08/05 全球购物
大学生应聘自荐信
2013/10/11 职场文书
餐饮业经理竞聘演讲稿
2014/01/14 职场文书
求职信需要的五点内容
2014/02/01 职场文书
《莫高窟》教学反思
2014/02/25 职场文书
法律进机关实施方案
2014/03/12 职场文书
环卫工人先进事迹材料
2014/06/02 职场文书
签证工作证明模板
2015/06/15 职场文书
三八妇女节致辞
2015/07/31 职场文书
Redis的字符串是如何实现的
2021/10/24 Redis