8.6 String对象中的相关方法
String对象中有一些方法要用到RegExp对象实例作为参数,下面是对这些方法的介绍。
8.6.1 match方法
语法格式为match(rgExp)。这个方法的作用与RegExp对象的exec方法类似,使用正则表达式模式对字符串进行搜索,并返回一个包含搜索结果的数组。
如果没有为正则表达式设置全局标志(g),match方法产生的结果与没有设置全局标志(g)的exec方法的结果完全相同。
如果设置了全局标志(g),match方法返回的数组中包含所有完整的匹配结果,元素0~n依次是每个完整的匹配结果。
传递给match方法的参数是一个RegExp类型的对象实例,即用表达式作为match方法的参数去搜索字符串;而传递给exec方法的参数是一个String类型的对象实例,即用表达式对象去搜索作为exec方法参数的字符串。
分析代码8.5中的代码及其运行结果,可以看到这一情况。
代码8.5 match方法的使用:8.5.htm
<script language="javascript">
var strSrc="xxa1b01c001yya2b02c002zz";
var re=/a(\d)b(\d{2})c(\d{3})/gi;
var arr;
arr = strSrc.match(re);
for(var i=0;i<arr.length;i++)
{
if(i < arr.length-1)
document.write("[\"" + arr[i] + "\","];
else
document.write("\"" + arr[i] + "\")");
}
</script>
该程序的显示结果如图8.5所示。

图8.5 显示结果
8.6.2 search方法
语法格式为search(rgExp)。该方法返回使用表达式搜索时,第一个匹配的字符串在整个被搜索字符串中的位置。代码8.6是search方法应用的例子。
代码8.6 search方法:8.6.htm
<html>
<head>
<title>search()方法</title>
</head>
<body bgcolor="lightgrey">
<h1>search()方法</h1>
<font size="+1">
<font face="宋体">
<script language = "JavaScript">
<!--
var myString="这是字符串对象search()方法的演示"
var regex = /对象/;
var index=myString.search(regex);
document.write("在字符串的第 "+index+ " 个字符位置找到匹配模式: "+ regex);
// -->
</script>
</body>
</html>
代码运行结果如图8.6所示。

图8.6 运行结果
8.6.3 replace方法
语法格式为replace(rgExp,replaceText)。该方法使用表达式模式对字符串执行搜索,并对搜索到的内容用指定的字符串替换,返回一个字符串对象,包含了替换后的内容。replace方法执行后,将更新RegExp对象中的有关静态属性以反映匹配情况。该方法需要两个参数,其含义分别如下。
rgExp参数为搜索时要使用的表达式对象。如果是字符串,不按正则表达式的方式进行模糊搜索,而进行精确搜索。
replaceText参数为用于替换搜索到的内容的字符串,其中可以使用一些特殊的字符组合来表示匹配变量。其中,$&是整个表达式模式在被搜索字符串中所匹配的字符串,$是表达式模式在被搜索字符串中所匹配的字符串左边的所有内容,$’是表达式模式在被搜索字符串中所匹配的字符串右边的所有内容,$$则是普通意义的“$”字符。
$1…$9分别是第1个到第9个子匹配所捕获到的内容,$01…$99分别是第1个到第99个子匹配所捕获到的内容,当$n和$nn(n为正整数)在表达式中没有对应的子匹配时,将被解释成普通字符。
代码8.7演示了如何使用replace方法,将一个字符串中的所有两位数字的十位和个位交换。
代码8.7 replace方法的使用:8.7.htm
<script language="javascript">
var strSrc="a12b34c56";
var re=/(\d)(\d)/gi;
var strDest=strSrc.replace(re, "$2$1");
alert(strSrc+"被转换为:"+strDest);
</script>
该程序的显示结果如图8.7所示。

图8.7 显示结果
8.6.4 split方法
split方法的语法格式如下。
split([separator[,limit]])
该方法返回按照某种分割标志符将一个字符串拆分为若干个子字符串时所产生的子字符串数组。separator是分割标志符参数,可以是多个字符或一个正则表达式,并不作为返回到数组元素的一部分。参数limit限制返回元素的个数。代码8.8是该方法的应用举例。
代码8.8 split方法:8.8.htm
<html>
<head><title>字符串对象split()方法 </title></head>
<body>
<font size="+2">
<center>世界四大洋:<br><br>
<font size="+1">
<font face="宋体">
<script language = "JavaScript">
<!--
var splitArray = new Array();
var string="太平洋、大西洋、印度洋、北冰洋";
var regex = /、/;
splitArray=string.split(regex);
for(i=0; i < splitArray.length; i++){
document.write(splitArray[i] + "<br>");
}
// -->
</script>
</center>
</body>
</html>
代码运行结果如图8.8所示。

图8.8 运行结果







