也说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 相关文章推荐
js获取url参数的使用扩展实例
Dec 29 Javascript
js left,right,mid函数
Jun 10 Javascript
JS 动态加载脚本的4种方法
May 05 Javascript
node.js中的fs.utimesSync方法使用说明
Dec 15 Javascript
DOM节点深度克隆函数cloneNode()用法实例
Jan 12 Javascript
JavaScript模拟实现键盘打字效果
Jun 29 Javascript
vue实现文章内容过长点击阅读全文功能的实例
Dec 28 Javascript
apicloud拉起小程序并传递参数的方法示例
Nov 21 Javascript
运用js实现图层拖拽的功能
May 24 Javascript
使用VUE实现在table中文字信息超过5个隐藏鼠标移到时弹窗显示全部
Sep 16 Javascript
Layui实现主窗口和Iframe层参数传递
Nov 14 Javascript
vue集成一个支持图片缩放拖拽的富文本编辑器
Jan 29 Vue.js
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
使用GROUP BY的时候如何统计记录条数 COUNT(*) DISTINCT
2011/04/23 PHP
PHP浮点比较大小的方法
2016/02/14 PHP
php curl中gzip的压缩性能测试实例分析
2016/11/08 PHP
php实现基于PDO的预处理示例
2017/03/28 PHP
php操作redis命令及代码实例大全
2020/11/19 PHP
js实现双击图片放大单击缩小的方法
2015/02/17 Javascript
JavaScript中this详解
2015/09/01 Javascript
轻松学习jQuery插件EasyUI EasyUI创建CRUD应用
2015/11/30 Javascript
jQuery通过deferred对象管理ajax异步
2016/05/20 Javascript
es6的数字处理的方法(5个)
2017/03/16 Javascript
Bootstrap如何激活导航状态
2017/03/22 Javascript
利用require.js与angular搭建spa应用的方法实例
2017/07/19 Javascript
[08:47]DOTA2每周TOP10 精彩击杀集锦vol.6
2014/06/25 DOTA
[01:10]DOTA2亚洲邀请赛 征战号角响彻全场
2015/01/06 DOTA
Flask入门教程实例:搭建一个静态博客
2015/03/27 Python
举例讲解Python中is和id的用法
2015/04/03 Python
Python类的用法实例浅析
2015/05/27 Python
Python 专题五 列表基础知识(二维list排序、获取下标和处理txt文本实例)
2017/03/20 Python
Python自定义简单图轴简单实例
2018/01/08 Python
Python机器学习算法之k均值聚类(k-means)
2018/02/23 Python
python3操作微信itchat实现发送图片
2018/02/24 Python
用python处理图片之打开\显示\保存图像的方法
2018/05/04 Python
解决python报错MemoryError的问题
2018/06/26 Python
Django 内置权限扩展案例详解
2019/03/04 Python
python 设置xlabel,ylabel 坐标轴字体大小,字体类型
2019/07/23 Python
Python搭建代理IP池实现检测IP的方法
2019/10/27 Python
Python matplotlib实时画图案例
2020/04/23 Python
Python爬虫之Selenium下拉框处理的实现
2020/12/04 Python
全球领先的各类汽车配件零售商:Advance Auto Parts
2016/08/26 全球购物
ECCO爱步美国官网:来自丹麦的鞋履品牌
2016/11/23 全球购物
Java语言程序设计测试题判断题部分
2013/01/06 面试题
后勤园长自我鉴定
2013/10/17 职场文书
党性教育心得体会
2014/09/03 职场文书
教师工作能力自我评价
2015/03/04 职场文书
活动总结书怎么写
2015/05/11 职场文书
六种css3实现的边框过渡效果
2021/04/22 HTML / CSS