Javascript中字符串replace方法的第二个参数探究

 更新时间:2016年12月05日 10:59:42   作者:Jins  
当我们要把一段字符串中的某些指定字符替换掉,第一时间想到的就是replace方法,他的用法很简单,W3school上讲的清晰易懂。网上有关replace的文章也有很多了,那么这篇这里主要聊聊它的第二个参数,下面来一起看看,注意阅读本文需要对replace方法有一定了解。

前言

replace第一个参数一般放置的是正则表达式,用来匹配想要替换的文本;第二个参数一般我们放入的是字符串,用来替换掉正则匹配到的文本。

其实replace远比上面说的要强大的多,它的内部已经封装的很完善了,远不是我们想象的那么简单,下面我们就来详细聊聊replace的第二个参数。

实例介绍

现在要实现一个功能,把HTML中的字符实体转换成它们所对应的字符,比如:"&lt;"转换成对对应字符为:"<"。

下面我们来看看代码实现:

String.prototype.deentityfy=(function(){
  var entity = {
  lt:'<',
  gt:'>'
  };
  return function(){
  return this.replace(/&([^&;]+);/g,
   function(a,b,c,d){
   console.log('a:'+a+'---b:'+b+'---c:'+c+'---d:'+d);
   var r = entity[b];
   return typeof r ==='string' ? r : a ;
   })
  }
 }())
 document.write('&lt;h1&gt;我是标题&lt;/h1&gt;'.deentityfy());

这里得讲讲字符实体,以免下面混淆。

字符实体是不会当作HTML语句来解析的,比如上面的'&lt;h1&gt;我是标题&lt;/h1&gt;'这一段输出到页面上,我们看到的是这样的:

  

<h1>只是被浏览器当作字符串输出,而不是标签输出,上面这段代码就是把这些字符实体转换成对应字符,能够被浏览器所编译。

我们一步步来看上面的代码是怎么实现的。

首先,给String对象的原型挂载了一个deentityfy方法,这个方法是个自执行函数,使用闭包的形式,函数内的所有内容对外都是不可见的。

函数内,我们定义了一个entity对象字面量,里面有两个属性,分别对应标签的左右尖括号。

接下来return一个匿名函数,把我们要做的事写在这个函数内。

我们调用replace方法,第一个参数放置正则表达式:

/&([^&;]+);/g

这段正则表达式的匹配规则是:以"&"开头,后面紧跟一个或一个以上不是"&"和";"的字符,以";"结束。后面的g代表全局匹配。(更多有关正则表达式的学习请点击这里

这里着重说下,正则中的"()"和javascript中运算时使用的"()"概念是不同的,这里的括号术语叫做:捕获括号。简单的说就是把括号内匹配到的字符暂时储存起来,在待会的替换环节可以取出来用。

接下来详细讲讲replace的第二个参数,也就是本文的重点。

我们一般是放一个字符串在第二个参数中,直接用于替换所匹配到的字符;还有更高阶的技巧,使用$字符可以取得捕获括号中的内容,再进行相关操作。

还有第三种方法, 给第二个参数传入匿名函数,函数的返回值用做替换的字符。

匿名函数有4个参数可以传入,当然,这些参数都不是必须要传的。

  第一个参数:正则所匹配到的字符;

  第二个参数:捕获括号所捕获到的字符;

  第三个参数:正则匹配到的每段字符的第一个字符的索引;

  第四个参数:用于匹配的字符串主体;

我把上面代码的运行结果打印出来大家应该就很清晰了:

  

 

总结

好了,以上就是这篇文章的全部内容了,接触正则也快三年时间了,一直不知道正则还有这么强大的功能,当然也可能是我孤陋寡闻啦。希望大家永葆一颗学习的心,一起进步。同时也希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

相关文章

  • 果断收藏9个Javascript代码高亮脚本

    果断收藏9个Javascript代码高亮脚本

    这篇文章主要为大家分享了9个实用的Javascript代码高亮脚本,相信一定对大家的学习有所帮助,感兴趣的小伙伴们可以参考一下
    2016-01-01
  • 如何为你的JS项目添加智能提示与类型检查详解

    如何为你的JS项目添加智能提示与类型检查详解

    这篇文章主要给大家介绍了关于如何为你的JS项目添加智能提示与类型检查的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者使用JS具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-03-03
  • 一文详解如何有效的处理Promise并发

    一文详解如何有效的处理Promise并发

    这篇文章主要为大家介绍如何有效的处理Promise并发示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04
  • 微信小程序实现YDUI的ScrollNav组件

    微信小程序实现YDUI的ScrollNav组件

    这篇文章主要为大家详细介绍了微信小程序实现YDUI的ScrollNav组件,滚动导航效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-02-02
  • 一文带你快速理解JavaScript中call()函数的使用

    一文带你快速理解JavaScript中call()函数的使用

    这篇文章主要为大家详细介绍了JavaScript中call()函数的使用的相关知识,文中的示例代码讲解详细,具有一定的学习价值,需要的可以参考一下
    2023-03-03
  • jQuery实现动态生成表格并为行绑定单击变色动作的方法

    jQuery实现动态生成表格并为行绑定单击变色动作的方法

    这篇文章主要介绍了jQuery实现动态生成表格并为行绑定单击变色动作的方法,涉及jQuery页面元素遍历与事件动态响应相关操作技巧,需要的朋友可以参考下
    2017-04-04
  • 小程序实现授权登陆的解决方案

    小程序实现授权登陆的解决方案

    这篇文章主要介绍了小程序实现授权登陆的解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-12-12
  • JavaScript实现添加及删除事件的方法小结

    JavaScript实现添加及删除事件的方法小结

    这篇文章主要介绍了JavaScript实现添加及删除事件的方法,实例总结了javascript对事件的添加及删除的技巧,涉及javascript事件绑定的方法及浏览器兼容的相关注意事项,需要的朋友可以参考下
    2015-08-08
  • js、jquery实现列表模糊搜索功能过程解析

    js、jquery实现列表模糊搜索功能过程解析

    这篇文章主要介绍了js、jquery实现列表模糊搜索功能过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • 微信小程序如何加载数据库真实数据的实现

    微信小程序如何加载数据库真实数据的实现

    这篇文章主要介绍了微信小程序如何加载数据库真实数据的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03

最新评论