惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - 三生石上(FineUI控件)
月光博客
月光博客
人人都是产品经理
人人都是产品经理
Google DeepMind News
Google DeepMind News
M
MIT News - Artificial intelligence
Vercel News
Vercel News
MyScale Blog
MyScale Blog
爱范儿
爱范儿
博客园 - 司徒正美
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
IT之家
IT之家
H
Help Net Security
Last Week in AI
Last Week in AI
阮一峰的网络日志
阮一峰的网络日志
酷 壳 – CoolShell
酷 壳 – CoolShell
L
LangChain Blog
罗磊的独立博客
Stack Overflow Blog
Stack Overflow Blog
宝玉的分享
宝玉的分享
博客园 - 聂微东
云风的 BLOG
云风的 BLOG
J
Java Code Geeks
博客园 - 叶小钗
D
Docker

博客园 - Nio

Oracle Exception: Could not load file or assembly ‘Oracle.DataAccess, Version=2.111.7.20… [转载] 常用第三方开源上传组件总结 Dev Express google doc 无法访问解决 NHibernate 查詢多表返回到IList<Model>中 用 HTML 格式导出 Excel 时,如何保留显示网格线 清除 SQL SERVER 2005 事务日志 [原]Excel与OWC做报表总结 owc控件不能在win server 2003 64位中使用 禁用浏览器后退按钮方案 asp.net连接数据库(SQL Server 2005 Express)详细说明 当前标识没有对"Temporary ASP.NET Files"的写访问权限的解决办法 SqlServer 205 Express 常见问题 在模态窗口中提交后,如何关闭窗口再刷新父页面 Reporting Services 在程式中部署 .NET 事件模型教程(三)转载 .NET 事件模型教程(二)转载 .NET 事件模型教程(一)转载 .net Resource
js 中replace的用法 - Nio - 博客园
Nio · 2008-12-30 · via 博客园 - Nio

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

Js代码 复制代码

  1. <script language="javascript">   
  2. var stringObj="终古人民共和国,终古人民";   
  3.   
  4.   
  5.   
  6.   
  7. var newstr=stringObj.replace("终古","中国");    
  8. alert(newstr);   
  9. </script>  

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

Js代码 复制代码

  1. <script language="javascript">   
  2. var stringObj="终古人民共和国,终古人民";   
  3.   
  4.   
  5.   
  6.   
  7. var newstr=stringObj.replace("终古","中国");    
  8.   
  9. newstr=newstr.replace("终古","中国");    
  10. alert(newstr);   
  11. </script>  

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

Js代码 复制代码

  1. <script language="javascript">   
  2. var reg=new RegExp("终古","g");   
  3. var stringObj="终古人民共和国,终古人民";   
  4. var newstr=stringObj.replace(reg,"中国");    
  5. alert(newstr);   
  6. </script>  

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

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

Js代码 复制代码

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

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

Js代码 复制代码

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

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

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

Js代码 复制代码

  1. <script language="javascript">   
  2. function test(){   
  3.   alert("参数个数:"+arguments.length);   
  4.   alert("每一个参数的值:"+arguments[0]);   
  5.   alert("第二个参数的值"+arguments[1]);   
  6.     
  7. }   
  8.   
  9. test("aa","bb","cc");    
  10. </script>  

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

Js代码 复制代码

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

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

Js代码 复制代码

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

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

Js代码 复制代码

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

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

Js代码 复制代码

  1. <script language="javascript">   
  2. var str="他今年22岁,她今年20岁,他的爸爸今年45岁,她的爸爸今年44岁,一共有4人"  
  3. function test($1){   
  4.   var gyear=(new Date()).getYear()-parseInt($1)+1;   
  5.   return $1+"("+gyear+"年出生)";   
  6. }   
  7. var reg=new RegExp("(\\d+)岁","g");   
  8. var newstr=str.replace(reg,test);   
  9. alert(str);   
  10. alert(newstr);   
  11. </script>