也说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 相关文章推荐
推荐:极酷右键菜单
Nov 29 Javascript
解决IE6的PNG透明JS插件使用介绍
Apr 17 Javascript
js中实现多态采用和继承类似的方法
Aug 22 Javascript
JS+CSS实现大气清新的滑动菜单效果代码
Oct 22 Javascript
关于安卓手机微信浏览器中使用XMLHttpRequest 2上传图片显示字节数为0的解决办法
May 17 Javascript
JS正则表达式验证中文字符
May 08 Javascript
强大的JavaScript响应式图表Chartist.js的使用
Sep 13 Javascript
JS中Map和ForEach的区别
Feb 05 Javascript
Vue项目中设置背景图片方法
Feb 21 Javascript
浅谈vue限制文本框输入数字的正确姿势
Sep 02 Javascript
js实现碰撞检测
Jan 29 Javascript
Javascript设计模式之原型模式详细
Oct 05 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 返回13位时间戳的实现代码
2016/05/13 PHP
ExtJS Window 最小化的一种方法
2009/11/18 Javascript
MultiSelect左右选择控件的设计与实现介绍
2013/06/08 Javascript
对于Form表单reset方法的新认识
2014/03/05 Javascript
上传文件返回的json数据会被提示下载问题解决方案
2014/12/03 Javascript
JavaScript实现同步于本地时间的动态时间显示方法
2015/02/02 Javascript
javascript数组去重的六种方法汇总
2015/08/16 Javascript
纯jquery实现模仿淘宝购物车结算
2015/08/20 Javascript
js鼠标点击图片切换效果实现代码
2015/11/19 Javascript
创建一个类Person的简单实例
2016/05/17 Javascript
js中 计算两个日期间的工作日的简单实例
2016/08/08 Javascript
使用Javascript监控前端相关数据的代码
2016/10/27 Javascript
使用 jQuery.ajax 上传带文件的表单遇到的问题
2016/10/31 Javascript
详解Vue生命周期的示例
2017/03/10 Javascript
浅谈实现vue2.0响应式的基本思路
2018/02/13 Javascript
layer弹出层 iframe层去掉滚动条的实例代码
2018/08/17 Javascript
JS实现方形抽奖效果
2018/08/27 Javascript
Vue项目打包部署到iis服务器的配置方法
2019/10/14 Javascript
[09:59]DOTA2-DPC中国联赛2月7日Recap集锦
2021/03/11 DOTA
Python中的CURL PycURL使用例子
2014/06/01 Python
PyQt 线程类 QThread使用详解
2017/07/16 Python
利用numpy实现一、二维数组的拼接简单代码示例
2017/12/15 Python
python 脚本生成随机 字母 + 数字密码功能
2018/05/26 Python
Python各种扩展名区别点整理
2020/02/27 Python
Python map及filter函数使用方法解析
2020/08/06 Python
flask框架中的cookie和session使用
2021/01/31 Python
贝玲妃美国官方网站:Benefit美国
2016/08/28 全球购物
英国知名的皮手套品牌:Dents
2016/11/13 全球购物
工厂会计员职责
2014/02/06 职场文书
银行贷款委托书范本
2014/10/11 职场文书
爱情保证书
2015/01/17 职场文书
2015年转正工作总结范文
2015/04/02 职场文书
计划生育工作总结2015
2015/04/03 职场文书
Nginx配置并兼容HTTP实现代码解析
2021/03/31 Servers
Python制作动态字符画的源码
2021/08/04 Python
Javascript中async与await的捕捉错误详解
2022/03/03 Javascript