在上一篇文章中我们介绍了"正则表达式-创建正则表达式",本文将继续了解:"正则表达式-使用正则表达式的字符串对象方法"。
我们在程序中除了可以使用正则表达式对象的方法test()
和exec()
进行字符串测试和匹配之外,还可以使用String对象的4个方法来完成这些任务。在完成某些任务时,使用这些方法可能会更加简单有效。这4个方法如下表所示:
| 方法 | 功能 | |----------------------------|-----------------------------------| | match(regex) | 在一个数组中返回与正则表达式regex相匹配的子串 | | replace(regex,replacement) | 将字符串中的regex指定的子串替换为子串replacement | | search(regex) | 查找正则表达式regex指定的模式在字符串中的开始位置 | | split(regex) | 使用正则表达式regex分割字符串,并将分割的结果以数组的形式返回 |
match()方法
字符串对象的match()
方法用于在字符串中搜索匹配的子串,并将匹配的结果在一个数组中返回。如果未找到匹配的子串,那么返回null
。当在正则表达式中指定了g
选项之后,match()
方法进行全局搜索,并返回包含所有匹配子串的数组。match()
方法的语法格式为:
matchArr = myString.match(regex);
其中,"myString"为要搜索的字符串,"regex"为指定的匹配模式的正则表达式。
下面是一个match()
方法的例子。
var matchArr = new Array();
var mystring = "人在智慧上应当是明豁的,道德上应该是清白的,身体上应该是清洁的。";
var regex = /应[当该]/g;
var matchArr = mystring.match(regex);
document.write("匹配子串的个数为: "+matchArr.length+"<br>");
for (var i = 0; i < matchArr.length; i++) {
document.write("第"+i+"个匹配的子串为: "+matchArr[i]+ "<br>");
}
执行上面的代码,我们将得到下面的结果:
匹配子串的个数为: 3
第0个匹配的子串为: 应当
第1个匹配的子串为: 应该
第2个匹配的子串为: 应该
上面的例子中,将match()
方法的返回结果保存在数组matchArr中,然后输出了数组的长度。regex中的匹配模式使用了[]
字符,这会在后面做详细介绍。通过循环我们可以看到数组中保存的所有与模式匹配的子串。
replace()方法
字符串对象的replace()
方法用于搜索字符串,并用另一个字符串替换搜索到的字符串。在指定搜索模式时,可以将其指定为一个字符串,也可以指定为一个正则表达式。当将匹配模式指定为正则表达式时,正则表达式的i
选项用于指定字符串在搜索过程中不区分大小写,g
选项用于指定进行全局搜索,即替换匹配的所有子串。replace()
方法还能够与分组元字符配合使用,这将在后面介绍。
replace()
方法的语法格式为:
originalString = sourceString.replace(regex,value);
其中,originalString是替换完成后的字符串,sourceString是替换前的字符串,regex是指定匹配模式的正则表达式,value是替换后的内容。
下面是一个使用replace()
方法的例子。
var oldString = "不论是狮子还是羚羊,都要奔跑;不论是贫穷还是富有,都要去奋斗。"
var regex = /不论/g;
var newString = oldString.replace(regex,"不管");
document.write(newString);
在上面的例子中,使用replace()
方法来搜索oldString字符串,并将字符串中的"不论"修改为"不管"。得到的结果是:
不管是狮子还是羚羊,都要奔跑;不管是贫穷还是富有,都要去奋斗。
search()方法
search()
方法在字符串中搜索指定的匹配模式,找到该模式时,返回模式出现的开始位置,这个位置从0开始计数。如果未找到匹配的模式,那么会返回-1。
对于简单的字符串搜索,字符串对象的indexOf()
方法就够用了,但是对于比较复杂的匹配搜索,我们应该使用search()
方法,通过正则表达式来指定匹配模式。
search()
方法的语法格式为:
var index = myString.search(regex);
其中,index保存了search()
方法的返回值,该值表示所找到的匹配模式在字符串中出现的位置(从0开始计数)。如果没有找到,那么index的值为-1。
下面是一个使用search()
方法的例子。
var myString = "人不能象走兽那样活着,应该追求知识和美德。";
var regex = /知识/g;
var index = myString.search(regex);
document.write("在字符串的第 "+index+" 个字符位置找到了匹配模式: "+regex);
执行上面的代码得到的结果如下:
在字符串的第 15 个字符位置找到了匹配模式: /知识/g
从0开始计数,匹配模式"知识"位于字符串的第15个字符(一个汉字算一个字符)的位置。
split()方法
字符串对象的split()
方法将字符串按指定的模式分割为多个子串,并保存在数组中返回。我们通常把分割字符串的模式字符称为分割符。在split()
方法中,分割符使用正则表达式来指定,这样可以分割要求十分复杂的字符串。
split()
方法的语法格式为:
splitArr = myString.split(regex);
其中splitArr保存split()
方法返回值的数组,regex为正则表达式,这个表达式可以非常简单,也可以非常复杂。
下面是一个使用split()
方法的例子。
var splitArr = new Array();
var myString = "中国、美国、英国、法国、俄罗斯";
var regex = /、/;
splitArr = myString.split(regex);
for (var i = 0; i < splitArr.length; i++) {
document.write(splitArr[i]+ "<br>");
}
在这个例子中,使用的正则表达式模式为一个顿号,用它来分割字符串myString,得到的结果如下:
中国
美国
英国
法国
俄罗斯
我们也可以使用更为复杂的正则表达式模式,例如下面的例子:
var splitArr = new Array();
var myString = "中国、美国;英国、法国 俄罗斯";
var regex = /[、; ]/;
splitArr = myString.split(regex);
for (var i = 0; i < splitArr.length; i++) {
document.write(splitArr[i]+ "<br>");
}
在上面的代码中,使用的正则表达式模式为顿号、分号和空格中的任何一个来分割字符串myString,得到的结果和上例相同。