匹配字符的列表
可以通过将一个或多个单个字符括在中括号 [ ] 中来创建匹配字符的列表。 当字符括在中括号内时,该列表称为“中括号表达式”。
中括号表达式中的字符均仅与正则表达式中紧邻中括号表达式的单个字符相匹配。 下面的 JScript 正则表达式与“Chapter 1”、“Chapter 2”、“Chapter 3”、“Chapter 4”和“Chapter 5”匹配。
/Chapter [12345]/
中括号表达式指定的只是匹配紧跟在单词 Chapter 和空格后面的单个字符位置的字符集。 这是第九个字符位置。
中括号表达式中的字符
与在其他位置一样,普通字符在中括号中表示其本身。 即,它们与搜索文本中其本身的匹配项匹配。 大多数特殊字符在中括号表达式内出现时都会失去它们的意义。 下面是一些例外情况。
如果右中括号字符 (]) 不是第一项,则它结束一个列表。 若要匹配列表中的右中括号字符,请将它放在第一位,紧跟在左中括号 ([) 后面。
反斜杠字符 (\) 仍为转义字符。 若要匹配反斜杠字符,请使用两个反斜杠 (\\)。
使用字符范围连字符
如果希望使用范围而不是字符本身来表示匹配字符,则可以使用连字符 (-) 将范围中的开始字符和结束字符分开。 下面的正则表达式等效于 /Chapter [12345]/。
/Chapter [1-5]/
开始值和结束值均包括在范围内。 注意,还有一点很重要,按 Unicode 排序顺序,开始值必须在结束值的前面。 各个字符的字符值决定它们在范围内的相对顺序。
中括号表达式的典型用途是指定任何大写或小写字母字符或任何数字的匹配。 下面的表达式指定了这样的匹配。
/[A-Za-z0-9]/
在表达式中包括连字符
若要在中括号表达式中包括连字符,可以使用下列方法之一:
在它前面放置一个反斜杠转义符,如下面的表达式所示。
[\-]
将连字符放在中括号列表的开始或结尾。 下面的表达式匹配所有小写字母和连字符。
[-a-z] [a-z-]
创建一个范围,在该范围中,开始字符值小于连字符,而结束字符值等于或大于连字符。 下面的两个正则表达式都满足这些要求。
[!--] [!-~]
使用求反插入符号
将插入符号 (^) 放在列表的开头,还可以查找不在列表或范围内的所有字符。 如果插入字符出现在列表中的其他任何位置,则它匹配其本身;即,它没有特殊含义。 下面的正则表达式与不包含字符 1 到 5 的章节标题匹配。
/Chapter [^12345]/
在前面的示例中,表达式与第九个位置中除 1、2、3、4 或 5 之外的任何字符匹配。 这样,例如,“Chapter 7”就是一个匹配项,“Chapter 9”也是一个匹配项。
使用连字符 (-) 可以表示同样的表达式。 下面的表达式指定了这样的匹配。
/Chapter [^1-5]/
匹配任意字符
句点 (.) 可匹配字符串中的任意单个打印或非打印字符,换行符 (\n) 除外。 JScript 中的正则表达式 /a.c/ 可匹配“aac”、“abc”、“acc”、“adc”、“a1c”、“a2c”、“a-c”和“a#c”。
若要匹配搜索字符串中包含的句点 (.),则可以在正则表达式中句点的前面放置一个反斜杠 (\)。 正则表达式 /filename\.ext/ 匹配“filename.ext”。