在前端与后台交互的时候我们通常都需要将后台传递的数据绑定到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替换成Aconsole.log(str.replace("a","A"));//只会将第一个匹配到的a替换成A。因为没有在全局范围内查找console.log(str.replace(/a/,"A"));//所有a都被替换成了Aconsole.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"));//falseconsole.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、此次匹配在源字符串中的下标,返回的是第一个匹配到的字符的下标----24、源字符串----"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 replace高级用法相关推荐

  1. js replace不改变原str_总结javascript replace高级用法

    详解javascript replace高级用法 在前端与后台交互的时候我们通常都需要将后台传递的数据绑定到html中,这个绑定数据的方式我们通常是使用jQuery或者使用原生的innerHTML进行 ...

  2. JavaScript replace用法全解

    replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串.当replace应用在正则表达式上,它的价值是非常之高的! stringObject.replace( ...

  3. foreach用法_25个你不得不知道的数组reduce高级用法

    作者:JowayYoung 仓库:Github.CodePen 博客:掘金.思否.知乎.简书.头条.CSDN 公众号:IQ前端 联系我:关注公众号后有我的微信哟 特别声明:原创不易,未经授权不得对此文 ...

  4. 详解Vue中watch的高级用法

    转载自  详解Vue中watch的高级用法 我们通过实例代码给大家分享了Vue中watch的高级用法,对此知识点有需要的朋友可以跟着学习下. 假设有如下代码: 1 2 3 4 5 6 7 8 9 10 ...

  5. 细说 ASP.NET Cache 及其高级用法

    阅读目录 开始 Cache的基本用途 Cache的定义 Cache常见用法 Cache类的特点 缓存项的过期时间 缓存项的依赖关系 - 依赖其它缓存项 缓存项的依赖关系 - 文件依赖 缓存项的移除优先 ...

  6. 爬虫—Requests高级用法

    Requests高级用法 1.文件上传 我们知道requests可以模拟提交一些数据.假如有的网站需要上传文件,我们也可以用requests来实现. import requestsfiles = {' ...

  7. JavaScript replace()

    JavaScript replace() 方法 JavaScript String 对象参考手册 定义和用法 replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配 ...

  8. Qt QVector 详解:从底层原理到高级用法

    目录标题 引言:QVector的重要性与简介 QVector的常用接口 QVector和std::Vector 迭代器:遍历QVector 中的元素(Iterators: Traversing Ele ...

  9. C语言 —— 你不得不知道的 scanf 的高级用法

    如果你想让自己的输入更加炫酷.更加个性化.更加安全,那么还需要学习 scanf() 的高级用法,这才是大神和菜鸟的分水岭. 好了,言归正传,我们分三个方面讲解 scanf() 的高级用法. 1) 指定 ...

最新文章

  1. @ini_get php,php中get_cfg_var()和ini_get()的用法及区别_php技巧_脚本之家
  2. python特性和属性_Python之属性、特性和修饰符
  3. 系列文章|OKR与敏捷(三):赋予团队自主权
  4. ads无法启用状态服务器,NAC ADSSO 无法工作在Microsoft 2008服务器版本
  5. es python demo
  6. python内核大小_关于keras.layers.Conv1D的kernel_size参数使用介绍
  7. 我的控制反转,依赖注入和面向切面编程的理解
  8. linux下的c语言控制灯闪烁,C语言实现LED灯闪烁控制
  9. typhoon-blade c++ lib manager
  10. 电子计算机专业vs土木工程专业,最难学十大工科专业 不想累成狗就别去(高薪)...
  11. 行人和人脸识别数据集
  12. 字符串(后缀自动机):COGS 2399. 循环同构
  13. 分析Linux内核创建一个新进程的过程
  14. 乱谈企业化信息规划与实施
  15. OSS定制自定义response header
  16. Elasticsearch实战(十三)---聚合搜索Aggs聚合及Count,Avg操作
  17. 解决安装office2016后文件图标显示空白图标
  18. Maximum modulus principle and its corollary(Stein复分析)
  19. SQL日期时间常用格式化方法
  20. 六十二、基础框架(二十)集合物件

热门文章

  1. Docker(二) docker帮助、镜像及容器相关操作命令介绍
  2. Redis面试常问4-- 如何实现异步队列 Blpop key timeout
  3. 下一代微服务Service Mesh原理及实践
  4. java考驾照_基于JavaWeb的驾校考试系统.doc
  5. CentOS下rpm命令详解
  6. Go中数字转换字符串的正确姿势
  7. seata分布式事务协调管理器是如何实现的
  8. mongodb聚合操作之group
  9. C++官方文档-this
  10. 硬板床害死中国人?西方人都睡软床垫?究竟是谁睡错了?