正则表达式(Regular Expressions)

例子

1
var parse_url = /^(?:([A-Za-z]+):)?(\/{0,3})([0-9.-A-Za-z]+) (?::(\d+))?(?:\/( (?#)))?(?:\?( (#)))?(?:#(.*))?$/;

解析

1
2
3
4
5
6
7
8
1 ^表示正则字符串开始
2 (?:([A-Za-z]+):)?  匹配schema(可选),将结果放入第1组(不包括:)
3 (\/{0,3})  匹配0或1或2或3个/,将结果放入第2组
4 ([0-9.-A-Za-z]+) 匹配主机名,包括数字,-大小写字母。将结果放入第3组
5 (?::(\d+))?  匹配端口号。将结果放入第4组(不包括:)
6 (?:\/( ( ( (?#)))))? 匹配请求路径(可选),排除?#。将结果放入第5组(不包括/)
7 (?:\?( ( ( (#)))))? 匹配查询(可选),排除#。将结果放入第6组(不包括?)
8 (?:#(.*))?  匹配hash(可选)。将结果放入第7组(不包括#)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
var url = "http://www.ora.com:80/goodparts?q#fragment";
var result = parse_url.exec(url);
var names = ['url', 'scheme', 'slash', 'host', 'port', 'path', 'query', 'hash'];
var blanks = ' '; 
var i;
for (i = 0; i < names.length; i += 1) { 
	document.writeln(names[i] + ':' +
	blanks.substring(names[i].length), result[i]);
}

// produces
url: http://www.ora.com:80/goodparts?q#fragment 
scheme: http
slash: //
host: www.ora.com
port: 80
path: goodparts
query: q
hash: fragment

标识符

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
1 ^开始标识符
2 (?:...)标识不捕获的分组
3 ?标识分组可选,可匹配0或1次,same as {0,1} 
4 (...)标识捕获分组
5 [...]标识字符类,A-Za-z包括26个大小写字母
6 +标识匹配1或多次, same as {1,} 
7 \是转义符
8 {0,3}标识匹配0或1或2或3次。如果量词包含?后缀,则会倾向于懒惰匹配
9 \d数字字符
10 [^...]标识需要排除的字符,例如[^?#]:排除?和#
11 *标识匹配0或多次,same as {0,}.
12 .标识匹配任何字符
13 $结束标识符

Flag标识

Flag 意思
g 全局
i 忽略大小写
m 多行

转义

转义符 意思
\f 跳页
\n 换行
\r 回车
\t 制表符
\u Unicode字符
\b 空格
\d [0-9]
\D [^0-9]
\s [\f\n\r\t\u000B\u0020\u00A0\u2028\u2029]
\S [^\f\n\r\t\u000B\u0020\u00A0\u2028\u2029]
\w [0-9A-Za-z]
\W [^0-9A-Za-z]

需要转义的字符

1
-/[] ^ 

32个特殊的ASCII字符

1
2
3
4
5
6
7
`! "#$%&'()*+,-./:;<=>?@[\]^_`{|}~`

//可以这样写
(?:!|"|#|$|%|&|'|(|)|*|+|,|-|.|\/|:|;|<|=|>|@|[|\|]|\^|_||\{|\||\}|~)

//简单写法
[!-\/:-@\[-{-~]