replace方法的语法是:stringobj.replace(rgexp, replacetext) 其中stringobj是字符串(string),reexp可以是正则表达式对象(regexp)也可以是字符串(string),replacetext是替代查找到的字符串。下面举个简单例子说明一下:

<script language="javascript">
var stringobj="123s56s78"; //替换“s”为“b”
//并返回替换后的新字符
//原字符串stringobj的值没有改变
var newstr=stringobj.replace("s","b");
alert(newstr);
</script>

看完上面的例子之后,会发现第二个“s”并没有被替换成“b”,我们可以执行二次replace方法把第二个“s”也替换掉,程序经过改进之后如下:

<script language="javascript">
var stringobj="123s56s78"; //替换“s”为“b”
//并返回替换后的新字符
//原字符串stringobj的值没有改变
var newstr=stringobj.replace("s","b");
newstr=newstr.replace("s","b");
alert(newstr);
</script>

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

<script language="javascript">

     var stringobj="123s56s78";
var newstr=stringobj.replace(/s/g,"d");
alert(newstr);
</script>

上面讲的是replace方法最简单的应用,下面开始讲稍微复杂一点的应用。

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

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

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

<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可以获取到函数的所有参数,为了大家理解,请看下面的代码:

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

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

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

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

<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>

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

<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>

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

<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 newstr = str.replace(/(\d+)岁/g, test); alert(newstr);
</script>

javascript中,string的函数replace()的字符替换处理能力很强。replace()最简单的算是能力就是简单的字符替换。示例代码如下:

<script language="javascript">
var strm = "javascript is a good script language";
//在此我想将字母a替换成字母a
alert(strm.replace("a","a"));
</script>

运行后可以看到结果,它只替换了首字母。但如果加上正则表达式结果就不一样了!replace()支持正则表达式,它可以按照正则表达式的规则匹配字符或字符串,然后给予替换!

<script language="javascript">
var strm = "javascript is a good script language";
//在此我想将字母a替换成字母a
alert(strm.replace(/a/,"a"));
</script>

您一定发现了。这样还是只替换了第一个字母a。如果您熟悉正则,那这就难不住您。稍加修改就ok了。

<script language="javascript">
var strm = "javascript is a good script language";
//在此将字母a全部替换成字母a
alert(strm.replace(/a/g,"a"));
</script>

还可以这样,看看效果!

<script language="javascript">
var strm = "javascript is a good script language";
alert(strm.replace(/(javascript)\s*(is)/g,"$1 $2 fun. it $2"));
</script>

当然,它还能与函数进行合作,发挥出强大的功能。
先看看简单例子:将所有单词首字母换成大写。

<script language="javascript">
var strm = "javascript is a good script language";
function change(word)
{
 return word.indexof(0).touppercase()+word.substring(1);
}
alert(strm.replace(/\b\w+\b/g,change));
</script>

  由上可知,当正则表达式有"g"标志时,代表将处理整个字符串,即函数change的变换将应用于所有匹配的对象。而该函数有三个或更多参数,具体个数视正则表达式而定。
  最后还举个例子,将字符串所有单词倒序,用replace()处理是如此简单。

<script language="javascript">
var strm = "javascript is a good script language";
function change(word)
{
 var result = word.match(/(\w)/g);
if ( result )
{
 var str = "";
  for ( var i=result.length-1; i>=0; i-- )
 {
   str += result;
 }
 return str;
}
else
{
  return "null";
}
}
alert(strm.replace(/\b(\w)+\b/g,change));
</script>

JS中的replace方法以及与正则表达式的结合应用的更多相关文章

  1. JS中的replace方法

    JavaScript中replace() 方法如果直接用str.replace("-","!") 只会替换第一个匹配的字符. 而str.replace(/\-/ ...

  2. Javascript中使用replace()方法+正则表达式替换掉所有字符

    Js中的replace方法,只能替换掉第一次匹配到的字符,   而我们经常需要替换一个字符串中所有的匹配字符,这时候可以用正则表达式: str.replace(/a/g,"b"); ...

  3. js中的tostring()方法

    http://blog.sina.com.cn/s/blog_85c1dc100101bxgg.html js中的tostring()方法 (2013-11-12 11:07:43) 转载▼ 标签: ...

  4. 秒味课堂Angular js笔记------Angular js中的工具方法

    Angular js中的工具方法 angular.isArray angular.isDate angular.isDefined angular.isUndefined angular.isFunc ...

  5. JS中通过call方法实现继承

    原文:JS中通过call方法实现继承 讲解都写在注释里面了,有不对的地方请拍砖,谢谢! <html xmlns="http://www.w3.org/1999/xhtml"& ...

  6. jQuery与JS中的map()方法使用

    1.jquery中的map()方法 首先看一个简单的实例: $("p").append( $("input").map(function(){ return $ ...

  7. JavaScript -- 时光流逝(二):js中数组的方法

    JavaScript -- 知识点回顾篇(二):js中数组的方法 1. 数组 (1)定义数组,数组赋值 <script type="text/javascript"> ...

  8. python中的replace()方法的使用

    python中的replace()方法的使用 需求是这样的:需要将字符串的某些字符替换成其他字符 str.replace(old,new,max) 第一个参数是要进行更换的旧字符,第二个参数是新的子串 ...

  9. ASP.NET#使用母版时,如果要使用js中的getElementById()方法取得某个内容页的元素时要注意的问题

    当使用母版,要使用js中的getElementById()方法取得某个内容页的元素时,所选取的id并不是母版中内容页的id,而是在设计内容页时设定的id例子:母版页: ...... <head ...

随机推荐

  1. Tdxtreelist变色

    ACanvas.Font.Color := clRed;   //如果有加印的  变颜色

  2. oracle执行.sql文件

    ->win+R; ->CMD; ->SQLPLUS /NOLOG; ->CONNECT USER/PASSWORD@ORCL; ->@D:/XXX.SQL;

  3. Codeforces Round #343 (Div. 2) D - Babaei and Birthday Cake 线段树+DP

    题意:做蛋糕,给出N个半径,和高的圆柱,要求后面的体积比前面大的可以堆在前一个的上面,求最大的体积和. 思路:首先离散化蛋糕体积,以蛋糕数量建树建树,每个节点维护最大值,也就是假如节点i放在最上层情况 ...

  4. HDU-1814 Peaceful Commission 2sat

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1814 简单的2sat题. //STATUS:C++_AC_390MS_996KB #include & ...

  5. POJ1401 - Factorial

    题目大意 N!末尾0的个数 题解 0只能由2*5产生,所以只要求2,5有多少对即可,又因为10!中5的个数少于2,所以只要求因子5有多少个即可,答案即为N/5+N/25+N/125.. 代码: #in ...

  6. OpenSSH 高级运用两则

    00×0.相关介绍 OpenSSH(OpenBSD Secure Shell)使用 SSH 通过计算机网络加密通信的实现. 它是替换由 SSH Communications Security 所提供的 ...

  7. HTTP状态码及其含义 503 500 401 200 301 302

    下表显示了常见的HTTP 1.1状态代码以及它们对应的状态信息和含义. 应当谨慎地使用那些只有HTTP 1.1支持的状态代码,因为许多浏览器还只能够支持HTTP 1.0.如果你使用了HTTP 1.1特 ...

  8. TCP、UDP、IP包头结构分析(转)

    1.TCP数据段格式 TCP是一种可靠的.面向连接的字节流服务.源主机在传送数据前需要先和目标主机建立连接.然后,在此连接上,被编号的数据段按序收发.同时,要求对每个数据段进行确认,保证了可靠性.如果 ...

  9. 教程-MessageBox 使用方法

    对应对象:TApplication 声明:function MessageBox(Text,Caption:PChar;Flags:Word):Integer; 功能:MessageBox方法可以显示 ...

  10. sqlplus 连接数据库报错SP2-0642: SQL*Plus internal error state 2130, context 0:0:0

    sqlplus 连接数据库报错SP2-0642: SQL*Plus internal error state 2130, context 0:0:0 问题描述: 使用sqlplus客户端登录数据库,报 ...