详解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 相关文章推荐
XHTML-Strict 内允许出现的标签
Dec 11 Javascript
alixixi runcode.asp的代码不错的应用
Aug 08 Javascript
js对图片base64编码字符串进行解码并输出图像示例
Mar 17 Javascript
理解Javascript的call、apply
Dec 16 Javascript
JS实现alert中显示换行的方法
Dec 17 Javascript
JavaScript判断变量是否为数组的方法(Array)
Feb 24 Javascript
JS实现的数字格式化功能示例
Feb 10 Javascript
vue拖拽组件使用方法详解
Dec 01 Javascript
微信小程序结合mock.js实现后台模拟及调试
Mar 28 Javascript
vue中利用simplemde实现markdown编辑器(增加图片上传功能)
Apr 29 Javascript
小程序自动化测试的示例代码
Aug 11 Javascript
vue在App.vue文件中监听路由变化刷新页面操作
Aug 14 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代码优化之成员变量获取速度对比
2014/02/28 PHP
PHP遍历目录并返回统计目录大小
2014/06/09 PHP
php实现中文字符截取防乱码方法汇总
2015/04/29 PHP
RSA实现JS前端加密与PHP后端解密功能示例
2019/08/05 PHP
Thinkphp5框架使用validate实现验证功能的方法
2019/08/27 PHP
小议Function.apply() 之一------(函数的劫持与对象的复制)
2006/11/30 Javascript
Prototype Template对象 学习
2009/07/19 Javascript
JS+CSS 制作的超级简单的下拉菜单附图
2013/11/22 Javascript
iScroll中事件点击触发两次解决方案
2015/03/11 Javascript
浅析jQuery中使用$所引发的问题
2016/05/29 Javascript
基于Vuejs框架实现翻页组件
2020/06/29 Javascript
玩转NODE.JS(四)-搭建简单的聊天室的代码
2016/11/11 Javascript
vue2 如何实现div contenteditable=“true”(类似于v-model)的效果
2017/02/08 Javascript
JavaScript高阶函数_动力节点Java学院整理
2017/06/28 Javascript
js学习总结之DOM2兼容处理顺序问题的解决方法
2017/07/27 Javascript
Bootstrap标签页(Tab)插件切换echarts不显示问题的解决
2018/07/13 Javascript
es5 类与es6中class的区别小结
2020/11/09 Javascript
python访问纯真IP数据库的代码
2011/05/19 Python
python实现下载指定网址所有图片的方法
2015/08/08 Python
Python利用带权重随机数解决抽奖和游戏爆装备问题
2016/06/16 Python
Python处理PDF及生成多层PDF实例代码
2017/04/24 Python
Django Web开发中django-debug-toolbar的配置以及使用
2018/05/06 Python
解决Python2.7中IDLE启动没有反应的问题
2018/11/30 Python
Python redis操作实例分析【连接、管道、发布和订阅等】
2019/05/16 Python
Windows 安装 Anaconda3+PyCharm的方法步骤
2019/06/13 Python
html5 css3网站菜单实现代码
2013/12/23 HTML / CSS
德国著名廉价网上药店:Shop-Apotheke
2017/07/23 全球购物
英国鹦鹉店:Parrot Essentials
2018/12/03 全球购物
实习生的自我鉴定范文欣赏
2013/11/20 职场文书
人事档案接收函
2014/01/12 职场文书
团队会宣传标语
2014/10/09 职场文书
2015年基层党组织公开承诺书
2015/01/21 职场文书
离婚起诉书范文2015
2015/05/19 职场文书
2019思想汇报范文
2019/05/21 职场文书
Vue鼠标滚轮滚动切换路由效果的实现方法
2021/08/04 Vue.js
Java 通过手写分布式雪花SnowFlake生成ID方法详解
2022/04/07 Java/Android