2. 正则表达式语法
正则表达式的语法主要就是对各个元字符功能的描述。元字符从功能上大致分为:模式匹配符,定位符与原义字符,限定符,选择匹配符,特殊字符,字符匹配符,分组组合和反向引用符。
2.1 模式匹配符
下面的表格列出了在正则表达式中能够使用的字符列表及相关描述。
字符 | 描述 |
指出接着的字符为特殊字符。例如,"/b/" 匹配字符 "b",通过在 "b" 前面加一个反斜杠,也就是"//",则该字符变成特殊字符,表示匹配一个单词的分界线。 | |
^ | 表示匹配的字符必须在最前边。例如,"/^A/" 不匹配 "an A" 中的 "A",但匹配 "An A" 中最前面的 "A"。 |
$ | 与^类似,匹配最末的字符。例如,"/t$/" 不匹配 "eater" 中的 "t",但匹配 "eat" 中的 "t"。 |
* | 匹配*前面的字符0次或n次。例如,"/bo*/" 可以匹配 "A ghost booooed" 中的 "booo" 或 "A bird warbled" 中的 "b",但不匹配 "A goat grunted"中的任何字符。 |
+ | 匹配+前面的字符1次或n次。等价于"{1,}"。例如,"/a+/" 匹配 "candy" 中的 "a" 和 "caaaaaandy" 中的所有 "a" 。 |
? | 匹配?前面的字符0次或1次。例如,"/e?le?/" 匹配 "angel" 中的 "el" 和 "angle" 中的 "le"。 |
. | (小数点) 匹配除换行符外的所有单个字符。 例如,"/.n/" 匹配 "nay, an apple is on the tree" 中的 "an" 和 "on",但不匹配 "nay"。 |
(x) | 匹配 "x" 并记录匹配的值。例如,"/(foo)/" 匹配和记录 "foo bar" 中的 "foo"。匹配子串能被结果数组中的索引[1],...[n]返回,或被RegExp对象的属性$1...$9返回 |
x|y | 匹配 "x" 或者 "y"。例如,"/green|red/" 匹配 "green apple" 中的 "green" 和 "red apple" 中的 "red"。 |
{n} | 这里的n是一个正整数。匹配前面的n个字符。例如,"/a{2}/" 不匹配 "candy" 中的 "a",但匹配 "caaandy" 中前面的两个 "a"。 |
{n,} |
这里的n是一个正整数。匹配至少n个前面的字符。例如,"/a{2,}/" 不匹配 "candy" 中的 "a",但匹配 "caaaaandy" 中的所有 "a"。 |
{n,m} | 这里的n和m都是正整数。匹配至少n个最多m个前面的字符。例如, "/a{1,3}/" 不匹配 "cndy" 中的任何字符。但匹配 "candy" 中的 "a","caandy" 中的前面两个 "a"和 "caaaandy" 中的前面3个 "a"。需要注意的是,即使 "caaaandy" 中有很多个 "a",但只匹配前面的3个 "a"。 |
[xyz] | 字符列表,匹配列出的任意字符。可以通过连字符"-"指出一个字符范围。例如, "[abcd]" 跟 "[a-d]" 一样,它们匹配 "brisket" 中的 "b" 和 "ache" 中的 "a"。 |
[^xyz] | 字符补集。匹配除了列出的字符外的所有东西。可以使用连字符 "-" 指出一个字符范围。 |
[] | 匹配一个空格(不要与 "/b" 混淆) |
匹配一个单词的分界线,如一个空格。例如,"/nw/"匹配 "noonday"中的"no","/wy/"匹配 "possibly yesterday" 中的 "ly"。 | |
B | 匹配一个单词的非分界线。例如,"/wBn/" 匹配 "noonday" 中的 "on","/yBw/" 匹配 "possibly yesterday" 中的 "ye"。 |
cX | X是一个控制字符。匹配一个字符串的控制字符。例如,"/cM/"匹配一个字符串中的control-M |
d | 匹配一个数字,等价于 "[0-9]"。例如,"/d/" 或 "/[0-9]/" 匹配 "B2 is the suite number" 中的 "2" |
D | 匹配任何的非数字,等价于 "[^0-9]"。例如,"/D/" 或 "/[^0-9]/" 匹配 "B2 is the suite number" 中的 "B" |
f | 匹配一个表单符 |
匹配一个换行符 | |
匹配一个回车符 | |
s | 匹配一个单个white空格符,包括空格、tab、form feed、换行符。等价于 "[f v]" |
S | 匹配一个制表符 |
v | 匹配一个顶头制表符 |
匹配一个制表符 | |
w | 匹配所有的数字和字母以及下划线,等价于"[A-Za-z0-9]" |
W | 匹配除数字、字母、下划线外的其他字符。等价于"[^A-Za-z0-9]" |
这里的n是一个正整数。匹配一个正则表达式的最后一个子串的n的值(计数左圆括号)。 | |
ooctal和xhex | 这里的 "ooctal" 是一个八进制的 escape值,而 "xhex" 是一个十六进制的escape值,允许在一个正则表达式中嵌入ASCII码。 |