14.2.3 模式的分组部分

我们可以使用圆括号在模式中创建一个子分组。当使用表14-2中的任何字符来匹配同一模式的多个实例的时候,子分组非常方便好用。

14.2.3 模式的分组部分 - 图1

例如,假设想要看看一个字符串是否包含了“Apr”或“April”,这二者都以“Apr”开头,因此,我们知道要匹配它,但是,我们不能只匹配“Apr”,因为“Apricot”或“Aprimecorp”中也会匹配“Apr”。因此,我们必须匹配“Apr”后面跟着一个空格,或者其他的单词结尾(这要用到表14-1中所述的\b正则表达式字符),或者是April后面跟着别的单词结尾。换句话说,“il”是可选的。下面展示了如何使用圆括号做到这一点:


var sentence='April is the cruelest month.’;

var aprMatch=/Apr(il)?\b/;

if(sentence.search(aprMatch)!=-1){

//found Apr or April

}else{

//not found

}


这里使用的正则表达式/Apr(il)?\b/,使得“Apr”成为必需的,但是,子模式(il)是可选的(即?字符意味着出现0次或一次)。最后,\b匹配单词的结尾,因此,我们不会匹配“Apricot”或“Aprilshowers”。(参见14.2.7节了解子模式的另一用法。)

提示:在www.regexlib.com可以找到正则表达式的完整的库。在这个Web站点,我们可以找到用于任何情况的正则表达式。