当前位置: 代码迷 >> Web前端 >> replace中轮换、搜索的使用
  详细解决方案

replace中轮换、搜索的使用

热度:145   发布时间:2012-10-27 10:42:26.0
replace中替换、搜索的使用

<script language="javascript"> var strObj="空谷悠悠喜欢题足球,空谷悠悠喜欢打乒乓球"; alert(strObj); newStr = strObj.replace("空谷悠悠","小谷"); alert(newStr); </script>

?replace 方法

返回根据正则表达式进行文字替换后的字符串的复制。

stringObj.replace(rgExp, replaceText)

参数

stringObj

必选项。要执行该替换的 String 对象或字符串文字。该字符串不会被 replace 方法修改。

rgExp

必选项。为包含正则表达式模式或可用标志的正则表达式对象。也可以是 String 对象或文字。如果 rgExp 不是正则表达式对象,它将被转换为字符串,并进行精确的查找;不要尝试将字符串转化为正则表达式。

replaceText

必选项。是一个String 对象或字符串文字,对于stringObj 中每个匹配 rgExp 中的位置都用该对象所包含的文字加以替换。在 Jscript 5.5 或更新版本中,replaceText 参数也可以是返回替换文本的函数。

??????????????????????????????????????????????????????????????????????????? ----------文档引文

为了帮助大家更好的理解,下面举个简单例子说明一下:

?

?

?

<script language="javascript"> var strObj="空谷悠悠喜欢踢足球,空谷悠悠喜欢打乒乓球"; alert(strObj); newStr = strObj.replace("空谷悠悠","小谷"); alert(newStr); </script>


?

这段脚本的意思很明显,将“空谷悠悠”替换为“小谷”,但是你在运行后发现,仅仅将第一个匹配的字符串替换了过来,如果我们执行二次replace方法,可以将第二处的字符串也替换,但是如果有N个匹配出呢?难道还要执行N此吗,有了正则表达式之后,就可以一次将所有的匹配字符串都替换过来。

<script language="javascript"> var strObj="空谷悠悠喜欢题足球,空谷悠悠喜欢打乒乓球"; alert(strObj); var reg = new RegExp("空谷悠悠","g"); var newStr = strObj.replace(reg,"小谷"); alert(newStr); </script>

?

<script language="javascript"> var strObj="空谷悠悠喜欢踢足球,空谷悠悠喜欢打乒乓球"; alert(strObj); var reg = new RegExp("空谷悠悠","g"); var newStr = strObj.replace(reg,"小谷"); alert(newStr); </script>


?

?

接下来介绍repalce收索的作用,往往将收索的关键字以高亮颜色显示出来,我们也以简单的代码也说明:

<script language="javascript"> var strObj="空谷悠悠喜欢题足球,空谷悠悠喜欢打乒乓球"; alert(strObj); var newStr = strObj.replace(/(空谷悠悠)/g,"<font color=red>$1</font>"); document.write(newStr); </script>

?

<script language="javascript"> var strObj="空谷悠悠喜欢踢足球,空谷悠悠喜欢打乒乓球"; alert(strObj); var newStr = strObj.replace(/(空谷悠悠)/g,"<font color=red>$1</font>"); document.write(newStr); </script>


?

?

上面的程序缺少互动性,我们修改一下程序,实现可以自主输入要查询的字符,代码如下:

<script language="javascript"> var strObj="空谷悠悠喜欢踢足球,空谷悠悠喜欢打乒乓球"; alert(strObj); var s = prompt("请输入要查找的字符","空谷悠悠"); alert(s); var reg = new RegExp("("+s+")","g"); var newStr = strObj.replace(reg,"<font color=red>$1</font>"); document.write(newStr); </script>


?

?

这里$1表示的就是左边表达式中括号内的字符,即第一个子匹配,同理可得$2表示第二个子匹配。什么是子匹配呢?通俗点讲,就是左边每一个括号是第一个子匹配,第二个括号是第二个子匹配。

当我们要把查找到的字符进行运算的时候,在函数Function的内部,有一个arguments集合,这个集合存储了当前函数的所有参数,通过arguments可以获得函数的所有参数,同样以一个例子进行说明。

?

<script language="javascript"> function test(){alert("参数个数:"+arguments.length); for(var i =0;i<arguments.length;i++) { alert("第" + i + "个参数:"+arguments[i]) } } //可以用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"> var reg=new RegExp("d","g"); var str="abd1afa4sdf"; str.replace(reg,function(){alert(arguments.length);}); </script>


?

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

?

?

?

?

?进观察我们发现,第一个参数表示匹配到的字符,第二个参数表示匹配时的字符最小索引位置,第三个参数表示被匹配的字符串。其实这些参数的个数,还会随着子匹配的变多而变多。

?

?

?

  相关解决方案