replace中替换、搜索的使用

本文介绍了JavaScript中使用replace方法进行字符串替换的技巧,包括如何利用正则表达式进行全局替换,以及如何通过替换函数实现更复杂的操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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


 

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

 

 

 

 

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

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值