详解javascript replace高级用法


Posted in Javascript onFebruary 17, 2019

在前端与后台交互的时候我们通常都需要将后台传递的数据绑定到html中,这个绑定数据的方式我们通常是使用jQuery或者使用原生的innerHTML进行绑定,当然也可以使用artTemplate模板来绑定数据,那么artTemplate模板它绑定数据的原理是什么呢?其实它就是利用了replace()方法。
对于正则replace约定了一个特殊标记符”$”:

1)、$i(i取值范围1~99):表示从左到右正则子表达式所匹配的文本
2)、$&:表示与正则表达式匹配的全部文本
3)、$`(`:1旁边的那个键):表示匹配字符串的左边文本
4)、$'(':单引号):表示匹配字符串的右边文本
5)、$$:表示$转移

1、replace基本用法

<script type="text/javascript">
  /*要求将字符串中所有的a全部用A代替*/

  var str = "javascript is great script language!";
  //只会将第一个匹配到的a替换成A
  console.log(str.replace("a","A"));
  //只会将第一个匹配到的a替换成A。因为没有在全局范围内查找
  console.log(str.replace(/a/,"A"));
  //所有a都被替换成了A
  console.log(str.replace(/a/g,"A"));
</script>

1.1、replace基本用法之替换移除指定class类

<script type="text/javascript">
  /*要求将下面这个元素中的unabled类移除掉*/

  <div class=”confirm-btn unabled mb-10” id=”j_confirm_btn”>提交</div>
  var classname = document.getElementById(“j_confirm_btn”).className;
  /*(^|\\s)表示匹配字符串开头或字符串前面的空格,(\\s|$)表示匹配字符串结尾或字符串后面的空格*/
  var newClassName = classname.replace(/(^|\\s)unabled(\\s|$)/,””);
  document.getElementById(“j_confirm_btn”).className = newClassName;
</script>

2、replace高级用法之 ---- $i

2.1、简单的$i用法

<script>
  /*要求:将字符串中的双引号用"-"代替*/

  var str = '"a", "b"';
  console.log(str.replace(/"[^"]*"/g,"-$1-"));
  //输出结果为:-$1-, -$1-
  /*解释:$1就是前面正则(/"[^"]*"/g)所匹配到的每一个字符。*/
</script>

2.2、$i与分组结合使用

<script>
  /*要求:将下面字符串替换成:javascript is fn.it is a good script language*/
  
  var str = "javascript is a good script language";
  console.log(str.replace(/(javascript)\s*(is)/g,"$1 $2 fn.it $2"));
  /*解释:每一对括号都代表一个分组,从左往右分别代表第一个分组,第二个分组...;如上"*(javascript)"为第一个分组,
"(is)"为第二个分组。$1就代表第一个分组匹配的内容,$2就代表第二个分组匹配的内容,依此类推...*/
</script>

2.3、$i与分组结合使用----关键字高亮显示

当我们使用谷歌搜索的时候我们会发现我们搜索的关键字都被高亮显示了,那么这种效果用JavaScript能否显示呢?答案是可以的,使用replace()很轻松就搞定了。

<script>
  /*要求:将下列字符串中的"java"用红色字体显示*/
  
  var str = "Netscape在最初将其脚本语言命名为LiveScript,后来Netscape在与Sun合作之后将其改名为JavaScript。
JavaScript最初受Java启发而开始设计的,目的之一就是“看上去像Java”,因此语法上有类似之处,一些名称和命名规范也借自Java。
但JavaScript的主要设计原则源自Self和Scheme。";

  document.write(str.replace(/(java)/gi,'<span style="color: red;font-weight: 800;">$1</span>'));

  /*解释:必须要开启全局搜索和忽略大小写,否则匹配不到所有的”java”字符*/
</script>

2.4、反向分组----分组的反向引用

在正则中,当我们需要匹配两个或多个连续的相同的字符的时候,就需要用到反向引用了,查找连续重复的字符是反向引用最简单却也是最有用的应用之一。上面的”$i”也是反向分组的一种形式,这里再介绍另一种反向分组。

<script type="text/javascript">
  /* /ab(cd)\1e/ 这里的 \1 表示把第1个分组的内容重复一遍*/

  console.log(/ab(cd)\1e/.test("abcde"));//false
  console.log(/ab(cd)\1e/.test("abcdcde"));//true

  /*要求:将下列字符串中相领重复的部分删除掉"*/
  var str = "abbcccdeee";
  var newStr = str.replace(/(\w)\1+/g,"$1");
  console.log(newStr); // abcde
</script>

3、replace高级用法之参数二为函数

replace函数的第二个参数不仅可以是一个字符,还可以是一个函数!

3.1、参数二为函数之参数详解

<script>
  var str = "bbabc";
  var newStr = str.replace(/(a)(b)/g,function (){
  console.log(arguments);//["ab", "a", "b", 2, "bbabc"]
   /*参数依次为:
    1、整个正则表达式所匹配到的字符串----"ab"
    2、第一个分组匹配到的字符串,第二个分组所匹配到的字符串....依次类推一直      到最后一个分组----"a,b"
    3、此次匹配在源字符串中的下标,返回的是第一个匹配到的字符的下标----2
    4、源字符串----"bbabc"
   */
  })
</script>

3.2、参数二为函数之首字母大写案例

<script>
  /*要求:将下列字符串中的所有首字母大写*/
  
  var str = "Tomorrow may not be better, but better tomorrow will surely come!";
  var newStr = str.replace(/\b\w+\b/gi,function (matchStr){
    console.log(matchStr);//匹配到的字符
    return matchStr.substr(0,1).toUpperCase() + matchStr.substr(1);
  });
  console.log(newStr);
</script>

3.3、参数二为函数之绑定数据----artTemplate模板核心

<h1>周星驰喜剧电影:</h1>
<div id="content"></div>
<script type="text/javascript">
  var data = {
    name: "功夫",
    protagonist: "周星驰"
  },
  domStr = '<div><span>名称:</span><span>{{name}}</span></div><div><span>导演:</span><span>{{protagonist}}</span> </div>';

  document.getElementById("content").innerHTML = formatString(domStr,data);
  /*绑定数据的核心就是使用正则进行匹配*/
  function formatString(str,data){
    return str.replace(/{{(\w+)}}/g,function (matchingStr,group1){
      return data[group1];
    });
  }
</script>

4、replace高级用法之获取与正则表达式匹配的文本

4.1、replace高级用法之获取与正则表达式进行匹配的源字符串

<script>
  var str = "i am a good man";
  var newStr = str.replace(/good/g,"$&");
  console.log(newStr);//结果:输出i am a good man
  /*解释:在这里”$&”就是与正则表达式进行匹配的那个源字符串*/
</script>

4.2、replace高级用法之获取正则表达式匹配到的字符

<script>
  /*要求:将"i am a good man"替换成"i am a good-gond man" */
  
  var str = "i am a good man";
  var newStr = str.replace(/good/g,"$&-$&");
  console.log(newStr);
  /*解释:在这里”$&”可以获取到前面正则表达式匹配的内容,如上面的”$&”就是正则表达式匹配到的”good”*/
</script>

5、replace高级用法之获取正则匹配的左边的字符

<script>
  /*要求:将下列字符串替换成"java-java is a good script"*/

  var str = "javascript is a good script";
  var newStr = str.replace(/script/,"-$`");
  console.log(newStr)
  /*解释:"$`"获取的是正则左边的内容,如上正则中"script"字符前面的是"java","-$`"就是"-java","-$`"会把script替换掉。*/
</script>

6、replace高级用法之获取正则匹配的右边的字

<script>
   /*要求:将下列字符替换成"java is a good language!it is a good script is a good script"*/
   
  var str = "javascript is a good script";
  var newStr = str.replace(/script/," is a good language!it$'");
  console.log(newStr)
  /*解释:"$'"获取的就是str右边的内容,如上正则中"$'"就是" is a good script"。
  " is a good language!it$'"会把正则匹配到的"script"替换掉*/
</script>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JS location几个方法小姐
Jul 09 Javascript
javascript中的prototype属性实例分析说明
Aug 09 Javascript
IE6下js通过css隐藏select的一个bug
Aug 16 Javascript
JavaScript中变量提升 Hoisting
Jul 03 Javascript
jquery click([data],fn)使用方法实例介绍
Jul 08 Javascript
JavaScript 实现简单的倒计时弹窗DEMO附图
Mar 05 Javascript
javascript实现页面刷新时自动清空表单并选中的方法
Jul 18 Javascript
表单input项使用label同时引用Bootstrap库导致input点击效果区增大问题
Oct 11 Javascript
javaScript生成支持中文带logo的二维码(jquery.qrcode.js)
Jan 03 Javascript
详解Js中的模块化是如何实现的
Oct 18 Javascript
LayUI表格批量删除方法
Aug 15 Javascript
vue router 跳转时打开新页面的示例方法
Jul 28 Javascript
Nuxt.js 数据双向绑定的实现
Feb 17 #Javascript
详解微信小程序实现仿微信聊天界面(各种细节处理)
Feb 17 #Javascript
JavaScript遍历DOM元素的常见方式示例
Feb 16 #Javascript
原生JS实现逼真的图片3D旋转效果详解
Feb 16 #Javascript
JS实现简单的抽奖转盘效果示例
Feb 16 #Javascript
mocha的时序规则讲解
Feb 16 #Javascript
jQuery实现ajax的嵌套请求案例分析
Feb 16 #jQuery
You might like
php定时执行任务设置详解
2015/02/06 PHP
PHP使用JSON和将json还原成数组
2015/02/12 PHP
PHP列出MySQL中所有数据库的方法
2015/03/12 PHP
WordPress网站性能优化指南
2015/11/18 PHP
PHP正则验证字符串是否为数字的两种方法并附常用正则
2019/02/27 PHP
javascript 在网页中的运用(asp.net)
2009/11/23 Javascript
浅析JavaScript作用域链、执行上下文与闭包
2016/02/01 Javascript
jQuery zTree加载树形菜单功能
2016/02/25 Javascript
jQuery ajax全局函数处理session过期后的ajax跳转问题
2016/06/03 Javascript
JS实现的图片预览插件与用法示例【不上传图片】
2016/11/25 Javascript
Web前端开发之水印、图片验证码
2016/11/27 Javascript
JScript实现地址选择功能
2017/08/15 Javascript
AngularJS通过ng-Img-Crop实现头像截取的示例
2017/08/17 Javascript
bootstrap confirmation按钮提示组件使用详解
2017/08/22 Javascript
js 判断一个数字是不是2的n次方幂的实例
2017/11/26 Javascript
Vue的移动端多图上传插件vue-easy-uploader的示例代码
2017/11/27 Javascript
Bootstrap4如何定制自己的颜色和风格
2018/02/26 Javascript
使用proxy实现一个更优雅的vue【推荐】
2018/06/19 Javascript
js核心基础之构造函数constructor用法实例分析
2019/05/11 Javascript
Js逆向实现滑动验证码图片还原的示例代码
2020/03/10 Javascript
[06:07]刀塔密之二:攻之吾命受之吾幸
2014/07/03 DOTA
python实现字符串连接的三种方法及其效率、适用场景详解
2017/01/13 Python
Python基于time模块求程序运行时间的方法
2017/09/18 Python
flask中主动抛出异常及统一异常处理代码示例
2018/01/18 Python
python pandas消除空值和空格以及 Nan数据替换方法
2018/10/30 Python
Python2 Selenium元素定位的实现(8种)
2019/02/25 Python
Python数据类型之列表和元组的方法实例详解
2019/07/08 Python
使用WingPro 7 设置Python路径的方法
2019/07/24 Python
Baracuta官方网站:Harrington夹克,G9,G4,G10等
2018/03/06 全球购物
计算机应届毕业生自荐信范文
2014/02/23 职场文书
报告会主持词
2014/04/02 职场文书
小学社团活动总结
2014/06/27 职场文书
七一建党节演讲稿
2014/09/11 职场文书
党的群众路线教育实践活动对照检查材料思想汇报
2014/09/19 职场文书
JS一分钟在github+Jekyll的博客中添加访问量功能的实现
2021/04/03 Javascript
SpringBoot全局异常处理方案分享
2022/05/25 Java/Android