也说JavaScript中String类的replace函数

 更新时间:2011年09月22日 23:57:54   作者:  
最近读了sharpxiajun的博文《javascript笔记--String类replace函数的一些事》,感觉写的很好,很有帮助。
对回调函数的参数说明也很准确:
第一个参数是匹配到的字符串,最后一个是原字符串,倒数第二个参数是匹配到的字符串的在原字符串索引的起始位。
但我很好奇,第二到倒数第三之间的参数又是些什么呢?其实,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]);
}
});
};

运行结果:


例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]);
}
});
};

运行结果:


显然,两个测试例子结果均与预期一致。说明,当replace函数的replacement为函数时,此函数的参数各位确如W3school所言:

【0】:匹配模式的字符串;
【1 - (length - 3)】: 与模式中的子表达式匹配的字符串, 0个或多个;
【length - 2】:匹配串在原字符串的索引起始位置,从0开始;
【length - 1】:原字符串。

相关文章

  • JavaScript继承的三种方法实例

    JavaScript继承的三种方法实例

    这篇文章主要给大家介绍了关于JavaScript继承的三种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-05-05
  • js实现模态框的拖拽效果

    js实现模态框的拖拽效果

    这篇文章主要为大家详细介绍了js实现模态框的拖拽效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-07-07
  • JavaScript中数组去重常用的五种方法详解

    JavaScript中数组去重常用的五种方法详解

    去重是开发中经常会碰到的一个热点问题,这篇文章主要介绍了JS中实现数组去重中常用的5个方法,文中的示例代码讲解详细,感兴趣的可以了解一下
    2022-06-06
  • JS中事件冒泡和事件捕获介绍

    JS中事件冒泡和事件捕获介绍

    这篇文章主要为大家详细介绍了JS中事件冒泡和事件捕获的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-12-12
  • JavaScript实现复制内容到粘贴板代码

    JavaScript实现复制内容到粘贴板代码

    最近做了一个前端项目,其中有需求:通过button直接把input或者textarea里的值复制到粘贴板里。下面小编给大家分享JavaScript实现复制内容到粘贴板代码,需要的朋友参考下
    2016-03-03
  • 分页栏的web标准实现

    分页栏的web标准实现

    分页栏是网页上最常见不过的一个组件,本博文给出分页栏的一个web2.0标准示例,并作简要分析
    2011-11-11
  • JavaScript异步编程常见面试题汇总

    JavaScript异步编程常见面试题汇总

    本文将带大家学习异步编程这一块内容,鉴于异步编程是js中至关重要的内容,所以我们将学习异步编程涉及到的重点和难点,同时这一块内容也是面试常考范围,希望对大家有所帮助
    2023-02-02
  • 线路分流自动智能跳转代码,自动选择最快镜像网站(js)

    线路分流自动智能跳转代码,自动选择最快镜像网站(js)

    线路分流自动智能跳转代码,自动选择最快镜像网站,自动选择电信或网通线路跳转代码
    2011-10-10
  • 详谈javascript异步编程

    详谈javascript异步编程

    这篇文章主要为大家详细介绍了javascript异步编程,其实作为一种编程语言Javascript的异步编程是一个非常值得讨论的有趣话题,感兴趣的小伙伴们可以参考一下
    2016-02-02
  • 纯js实现div内图片自适应大小(已测试,兼容火狐)

    纯js实现div内图片自适应大小(已测试,兼容火狐)

    纯js实现在img图片大小未知,div大小未知的情况下,让图片自适应大小,需要的朋友可以参考下
    2014-06-06

最新评论