js.replace

在本章前面,我们曾向您介绍过如何使用 String 对象的 IndexOf()和 lastIndexOf()方法来搜索文本。但这些方法只能用于纯字符串式的搜索,如果想获得更强大的文本搜索能力就需要用到正则表达式了。String 对象也为我们提供了这种能力。在 String 对象中,以正则表达式对象为参数的方法主要有以下这些。 match()方法:返回的是一个包含匹配内容的数组。 search()方法:返回的是第一个匹配内容所在的位置。 replace()方法:该方法能将匹配的文本替换成指定的字符串。 split()方法:能根据指定的正则表达式将目标字符串分割成若干个数组元素。4.2.9.4 search()与 match()下面来看一些 search()与 match()方法的用例。首先,我们来新建一个 String对象:> var s = new String('HelloJavaScriptWorld');然后调用其 match()方法,这里返回的结果数组中只有一个匹配对象:> s.match(/a/);["a"]接下来,我们对其施加 g 修饰符,进行 global 搜索,这样一来返回的数组中就有了两个结果:> s.match(/a/g);["a", "a"]下面进行大小写无关的匹配操作:> s.match(/j.*a/i);["Java"] 第 4 章 对象 143而 search()方法则会返回匹配字符串的索引位置:> s.search(/j.*a/i);54.2.9.5 replace()replace()方法可以将相关的匹配文本替换成某些其他字符串。在下面的示例中,我们移除了目标字符串中的所有大写字符(实际上是替换为空字符串):> s.replace(/[A-Z]/g, '');"elloavacriptorld"如果我们忽略了 g 修饰符,结果就只有首个匹配字符被替换掉:> s.replace(/[A-Z]/, '');"elloJavaScriptWorld"当某个匹配对象被找到时,如果我们想让相关的替换字符串中包含匹配的文本,可以使用$&来代替所找到的匹配文本。例如,下面我们在每一个匹配字符前面加了一个下划线:> s.replace(/[A-Z]/g, "_$&");"_Hello_Java_Script_World"如果正则表达式中分了组(即带括号),那么可以用$1 来表示匹配分组中的第一组,而$2 则表示第二组,以此类推。> s.replace(/([A-Z])/g, "_$1");"_Hello_Java_Script_World"假设我们的 Web 页面上有一个注册表单,上面会要求用户输入 E-mail 地址、用户名和密码。当用户输入他们的 E-mail 地址时,我们可以利用 JavaScript 将 E-mail 的前半部分提炼出来,作为后面用户名字段的建议:> var email = "stoyan@phpied.com";> var username = email.replace(/(.*)@.*/, "$1");> username;"stoyan"4.2.9.6 回调式替换当我们需要执行一些特定的替换操作时,也可以通过返回字符串的函数来完成。这样,144 JavaScript 面向对象编程指南(第 2 版)我们就可以在执行替换操作之前实现一些必要的处理逻辑:> function replaceCallback(match){return "_" + match.toLowerCase();}> s.replace(/[A-Z]/g, replaceCallback);"_hello_java_script_world"该回调函数可以接受一系列的参数(在上面的示例中,我们忽略了所有参数,但首参数是依然存在的)。 首参数是正则表达式所匹配的内容。 尾参数则是被搜索的字符串。 尾参数之前的参数表示的是匹配内容所在的位置。 剩下的参数可以是由 regex 模式所分组的所有匹配字符串组。下面让我们来具体测试一下。首先,我们新建一个变量,用于存储之后传递给回调函数的整个 arguments 对象:> var glob;下一步是定义一个正则表达式,我们将 E-mail 地址分成三个匹配组,具体格式形如something@something.something:> var re = /(.*)@(.*)\.(.*)/;最后就是定义相应的回调函数了,它会接受 glob 数组中的参数,并返回相应的替换内容:var callback = function(){ glob = arguments; return arguments[1] + ' at ' + arguments[2] + ' dot ' + arguments[3];};然后我们就可以这样调用它们了:> "stoyan@phpied.com".replace(re, callback);"stoyan at phpied dot com" 第 4 章 对象 145下面是该回调函数返回的参数内容:> glob;["stoyan@phpied.com", "stoyan", "phpied",
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值