js中replace的用法总结


Posted in Javascript onDecember 27, 2013

replace方法的语法是:stringObj.replace(rgExp, replaceText) 其中stringObj是字符串(string),reExp可以是正则表达式对象(RegExp)也可以是字符串(string),replaceText是替代查找到的字符串。。为了帮助大家更好的理解,下面举个简单例子说明一下

Js代码

<script language="javascript">    
    var stringObj="终古人民共和国,终古人民";        //替换错别字“终古”为“中国”    
    //并返回替换后的新字符    
    //原字符串stringObj的值没有改变    
    var newstr=stringObj.replace("终古","中国");    
    alert(newstr);    
    </script>   
终古”为“中国”
的值没有改变
中国");

比我聪明的你,看完上面的例子之后,会发现第二个错别字“终古”并没有被替换成“中国”,我们可以执行二次replace方法把第二个错别字“终古”也替换掉,程序经过改进之后如下:

Js代码

    <script language="javascript">    
    var stringObj="终古人民共和国,终古人民";        //替换错别字“终古”为“中国”    
    //并返回替换后的新字符    
    //原字符串stringObj的值没有改变    
    var newstr=stringObj.replace("终古","中国");    
    newstr=newstr.replace("终古","中国");    
 alert(newstr);    
 </script>   
终古”为“中国”
的值没有改变
中国"); 
中国");

我们可以仔细的想一下,如果有N的N次方个错别字,是不是也要执行N的N次方replace方法来替换掉错别字呢??呵,不用怕,有了正则表达式之后不用一个错别字要执行一次replace方法。。程序经过改进之后的代码如下

Js代码

    <script language="javascript">    
    var reg=new RegExp("终古","g"); //创建正则RegExp对象    
    var stringObj="终古人民共和国,终古人民";    
    var newstr=stringObj.replace(reg,"中国");    
    alert(newstr);    
    </script>  

创建正则RegExp对象

上面讲的是replace方法最简单的应用,不知道大家有没有看懂??下面开始讲稍微复杂一点的应用。。

大家在一些网站上搜索文章的时候,会发现这么一个现象,就是搜索的关键字会高亮改变颜色显示出来??这是怎么实现的呢??其实我们可以用正则表达式来实现,具体怎么样实现呢?简单的原理请看下面的代码

Js代码

    <script language="javascript">    
    var str="中华人民共和国,中华人民共和国";    
    var newstr=str.replace(/(人)/g,"<font color=red>$1</font>");    
    document.write(newstr);    
    </script>  

上面的程序缺少互动性,我们再改进一下程序,实现可以自主输入要查找的字符

Js代码

    <script language="javascript">    
    var s=prompt("请输入在查找的字符","人");    
    var reg=new RegExp("("+s+")","g");    
    var str="中华人民共和国,中华人民共和国";    
    var newstr=str.replace(reg,"<font color=red>$1</font>");    
    document.write(newstr);    
    </script>   
人");

可能大家都会对$1这个特殊字符表示什么意思不是很理解,其实$1表示的就是左边表达式中括号内的字符,即第一个子匹配,同理可得$2表示第二个子匹配。。什么是子匹配呢??通俗点讲,就是左边每一个括号是第一个字匹配,第二个括号是第二个子匹配。。

当我们要把查找到的字符进行运算的时候,怎么样实现呢??在实现之前,我们先讲一下怎么样获取某一个函数的参数。。在函数Function的内部,有一个arguments集合,这个集合存储了当前函数的所有参数,通过arguments可以获取到函数的所有参数,为了大家理解,请看下面的代码

Js代码

    <script language="javascript">    
    function test(){    
       alert("参数个数:"+arguments.length);    
       alert("每一个参数的值:"+arguments[0]);    
       alert("第二个参数的值"+arguments[1]);    
      //可以用for循环读取所有的参数    
    }        test("aa","bb","cc");    
 </script>   
alert("
alert("
alert("
//循环读取所有的参数

看懂上面的程序之后,我们再来看下面一个有趣的程序

Js代码

    <script language="javascript">    
    var reg=new RegExp("\\d","g");    
    var str="abd1afa4sdf";    
    str.replace(reg,function(){alert(arguments.length);});    
    </script>  

我们惊奇的发现,匿名函数竟然被执行了二次,并且在函数里还带有三个参数,为什么会执行二次呢??这个很容易想到,因为我们写的正则表达式是匹配单个数字的,而被检测的字符串刚好也有二个数字,故匿名函数被执行了二次。。在匿名函数内部的那三个参数到底是什么内容呢??为了弄清这个问题,我们看下面的代码。

Js代码

    <script language="javascript">    
    function test(){    
    for(var i=0;i<arguments.length;i++){    
        alert("第"+(i+1)+"个参数的值:"+arguments[i]);    
    }    
    }    
    var reg=new RegExp("\\d","g");    
    var str="abd1afa4sdf";    
    str.replace(reg,test);    
 </script>   
for(var i=0;i<arguments.length;i++){
alert("个参数的值:"+arguments[i]);
}

经过观察我们发现,第一个参数表示匹配到的字符,第二个参数表示匹配时的字符最小索引位置(RegExp.index),第三个参数表示被匹配的字符串(RegExp.input)。其实这些参数的个数,还会随着子匹配的变多而变多的。弄清这些问题之后,我们可以用另外的一种写法

Js代码

    <script language="javascript">    
    function test($1){    
      return "<font color='red'>"+$1+"</font>"   
    }    
    var s=prompt("请输入在查找的字符","人");    
    var reg=new RegExp("("+s+")","g");    
    var str="中华人民共和国,中华人民共和国";    
    var newstr=str.replace(reg,test);    
    document.write(newstr);    
 </script>   
return "<font color='red'>"+$1+"</font>"
人");

看了上面的程序,原来可以对匹配到的字符为所欲为。下面简单举一个应用的例子

Js代码

    <script language="javascript">    
    var str="他今年22岁,她今年20岁,他的爸爸今年45岁,她的爸爸今年44岁,一共有4人"   
    function test($1){    
      var gyear=(new Date()).getYear()-parseInt($1)+1;    
      return $1+"("+gyear+"年出生)";    
    }    
    var reg=new RegExp("(\\d+)岁","g");    
    var newstr=str.replace(reg,test);    
    alert(str);    
 alert(newstr);    
 </script>  
Javascript 相关文章推荐
javascript实现上传图片前的预览(TX的面试题)
Aug 20 Javascript
JavaScript 数组的 uniq 方法
Jan 23 Javascript
javascript 模拟点击广告
Jan 02 Javascript
Javascript学习笔记之数组的构造函数
Nov 23 Javascript
2016年最热门的15 款代码语法高亮工具,美化你的代码
Jan 06 Javascript
原生JS查找元素的方法(推荐)
Nov 22 Javascript
JavaScript数据结构之双向链表定义与使用方法示例
Oct 27 Javascript
基于ES6作用域和解构赋值详解
Nov 03 Javascript
angularJs中json数据转换与本地存储的实例
Oct 08 Javascript
详解微信小程序支付流程与梳理
Jul 16 Javascript
JavaScript对象属性操作实例解析
Feb 04 Javascript
js属性对象的hasOwnProperty方法的使用
Feb 05 Javascript
利用javascript数组长度循环数组内所有元素
Dec 27 #Javascript
jquery插件jquery倒计时插件分享
Dec 27 #Javascript
js中substr,substring,indexOf,lastIndexOf的用法小结
Dec 27 #Javascript
window.open打开页面居中显示的示例代码
Dec 27 #Javascript
JSuggest自动匹配下拉框使用方法(示例代码)
Dec 27 #Javascript
jquery表单验证框架提供的身份证验证方法(示例代码)
Dec 27 #Javascript
JS 数字转换研究总结
Dec 26 #Javascript
You might like
PHP中数组的分组排序实例
2014/06/01 PHP
PHP 设计模式系列之 specification规格模式
2016/01/10 PHP
CI(CodeIgniter)模型用法实例分析
2016/01/20 PHP
PHP 使用 Imagick 裁切/生成缩略图/添加水印自动检测和处理 GIF
2016/02/19 PHP
php生成带logo二维码方法小结
2016/04/08 PHP
javascript实现的距离现在多长时间后的一个格式化的日期
2009/10/29 Javascript
使用JS进行目录上传(相当于批量上传)
2010/12/05 Javascript
js根据日期判断星座的示例代码
2014/01/23 Javascript
jQuery简单几行代码实现tab切换
2015/03/10 Javascript
Javascript实现鼠标右键特色菜单
2015/08/04 Javascript
全面解析Bootstrap排版使用方法(标题)
2015/11/30 Javascript
JavaScript统计字符串中每个字符出现次数完整实例
2016/01/28 Javascript
JavaScript开发Chrome浏览器扩展程序UI的教程
2016/05/16 Javascript
JS模拟的Map类实现方法
2016/06/17 Javascript
Jquery实现遮罩层的简单实例(就是弹出DIV周围都灰色不能操作)
2016/07/14 Javascript
谈谈JavaScript的New关键字
2016/08/26 Javascript
jquery 动态增加,减少input表单的简单方法(必看)
2016/10/12 Javascript
微信小程序之页面跳转和参数传递的实现
2017/09/29 Javascript
浅谈Webpack自动化构建实践指南
2017/12/18 Javascript
解析vue路由异步组件和懒加载案例
2018/06/08 Javascript
全面解析vue router 基本使用(动态路由,嵌套路由)
2018/09/02 Javascript
解决angularJS中input标签的ng-change事件无效问题
2018/09/13 Javascript
深入浅析vue-cli@3.0 使用及配置说明
2019/05/08 Javascript
Vue axios获取token临时令牌封装案例
2020/09/11 Javascript
[49:21]2018DOTA2亚洲邀请赛3月30日 小组赛B组 Effect VS iG
2018/03/31 DOTA
[55:26]DOTA2-DPC中国联赛 正赛 Aster vs LBZS BO3 第一场 2月23日
2021/03/11 DOTA
Python学习笔记整理3之输入输出、python eval函数
2015/12/14 Python
全面理解Python中self的用法
2016/06/04 Python
Python 给定的经纬度标注在地图上的实现方法
2019/07/05 Python
使用pyecharts生成Echarts网页的实例
2019/08/12 Python
英国布鲁姆精品店:Bloom Boutique
2018/03/01 全球购物
英国和国际包裹递送:ParcelCompare
2019/08/26 全球购物
精通CAD能手自荐书
2014/01/31 职场文书
工商管理专业大学生职业生涯规划范文
2014/03/09 职场文书
企业标语口号
2014/06/10 职场文书
汶川大地震感悟
2015/08/10 职场文书