转义字符表:
代码 |
说明 |
举例 |
\b |
匹配一个单词的边界 |
‘er\b’匹配以”er”结尾的单词,’\bne’匹配以”ne”开头的单词,’\bnever\b’仅匹配单词”never” |
\B |
匹配非单词边界 |
‘er\B’匹配任何包含”er”的单词 |
\c |
一般写法为\cx,匹配由x指明的控制字符,x的值必须为A-Z或a-z之一。否则将c视为一个原意的’c’字符 |
‘\cM’匹配一个Control-M或回车符 |
\d |
匹配数字字符。等价于[0-9] |
‘\d{3}’匹配3个数字 |
\D |
匹配一个非数字字符 |
‘\D{3}’匹配3个非数字字符 |
\f |
匹配一个换页符。等价于\x0c和\cL |
|
\n |
匹配一个换行符。等价于\x0a和\cJ |
|
\r |
匹配一个回车符。等价于\x0d和\cM |
|
\s |
匹配任何空白字符,包括空格、换页、制表符等。等价于[\f\n\f\t\v] |
|
\S |
匹配任何非空白字符。等价于[^v] |
|
\t |
匹配一个制表符。等价于\x09和\cI |
|
\v |
匹配一个垂直制表符。等价于\x0b和\cK |
|
\w |
匹配包括下划线的任何单词字符。等价于[A-Xa-z0-9_] |
|
\W |
匹配任何非单词字符[^A-Xa-z0-9_] |
|
\x |
一般写法为\xn,匹配n,其中n为16进制转义值。16进制转义值必须为确定的两个数字长。 |
‘\x41’匹配”A”。’\x041’则等价于’ ’和”1” |
\u |
一般写法为\un,其中n是一个用四个16进制数字表示的Unicode字符 |
‘\u00A9’ 匹配版权符号© |
选择和分组:
代码 |
说明 |
举例 |
| |
一般用法为A|B, 表示匹配A或者B |
man|woman 表示可以匹配 man 或者 woman |
( |
一般与 ) 联用,用来表示一个被获取的匹配 |
var a=/qq=(\d+)/.test("qq=10000");alert(RegExp.$1); 将会弹出10000, 可以看到正则表达式中,\d+被括号围起来了,那么匹配之后,括号中匹配的内容将被"获取",并存入到RegExp.$1中,所以现在RegExp.$1就存了\d+匹配得到的内容。如果正则表达式中有2个或者更多括号,第一个括号的内容为$1, 后面依次为$2,$3..$N |
[ |
一般与 ] 联用, 用来表示一个字符的集合 |
[abc] 可以匹配一个a或者一个b或者一个c [ab]+ 可以匹配多个a或者多个b或者混合,如:"ababababab" 或 "aaaaa", "bbbbb" |
?: |
表示一个非获取匹配,它的作用是让()变成普通的范围限定符,而不将其匹配内容存储至$N中 |
'industr(?:y|ies) 可以匹配industry 或者 industries |
?! |
非匹配预查,一般写法是(?!xxx),在任何不匹配xxx字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。 |
(1). 'Windows (?!95|98|NT|2000)' 能匹配 "Windows 3.1" 中的 "Windows",但不能匹配 "Windows 2000" 中的 "Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始 (2). 预查的流程,参见 ?= 的解释 |
?= |
匹配预查,一般写法是(?=xxx), 在任何匹配xxx字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。 |
(1). 'Windows (?=95|98|NT|2000)' 能匹配 "Windows 2000" 中的 "Windows" ,但不能匹配 "Windows 3.1" 中的 "Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。 (2). var x="12345";alert(x.match(/(?=\d{2})\d{1}/g));结果弹出1,2,3,4,每次匹配只消耗1个字符,而括号内的?=\d{2}是非获取的,不消耗字符,所以匹配了1之后,是从2开始查找,而不是3。 (3). 如果上方的说明不易理解,你可以把(?=)看成是一个探查敌情的侦察兵,而要被搜索的那个字符串为敌人区域,(?=xxx) 就是让?=这个侦察兵去敌人区域里找xxx, 例如上例中的?=\d{2},是要求查找2个数字,?=从头开始搜索,首先会找到12, 找到之后,我们就拿\d{1}尝试去匹配(占领)找到的这个位置,那么\d{1}就是匹配的1, 匹配结束后,相当于我们已经占领了敌人的1这个山头,?=作为侦察兵继续奔向下一个山头,23,同样,我们又拿\d{1}占领2这个山头,一直占到第4个山头,侦察兵继续往后,只有5一个数字了,不符合\d{2}这个条件(需要2个数字),侦查结束。 |
限定符:
代码 |
说明 |
举例 |
* |
表示一个字符重复任意次包括0次 |
(1). a* 表示希望匹配的字符串含有任意数目的字符a (2). [a-z]* 表示希望匹配到任意个小写字母 |
+ |
表示一个字符重复至少1次 |
a+ 表示希望匹配的字符串中最少含有1个a字符 |
? |
1.表示一个字符出现0次或1次 2.用来启用非贪婪模式 3.结合:,!,=等字符用于其它功能 |
1.a? 表示希望匹配的字符串中可能含有1个a字符 2.<[\s\S]+?> 去匹配<abc><abc>得到的是<abc>,如果不加问号,则得到<abc><abc> |
{ |
一般与 } 联用,表示所匹配字符的数量或数量范围 |
(1). X{2} 表示匹配2个X (2). X{2,} 表示匹配2个或者更多个X (3). X{2,5} 表示匹配2-5个X |
*? |
*的非贪婪写法 |
(1). 见 +? (2). 另见: ?? , +? |
+? |
+的非贪婪写法 |
[\s\S]+?# 去匹配aaa#bbbb#时,会匹配aaa#,而[\s\S]+#则会匹配aaa#bbbb# |
?? |
?的非贪婪写法 |
(1). 见 +? (2). 另见: *? , +? |
定位符:
代码 |
说明 |
举例 |
\b |
|
|
\B |
|
|
^ |
1.取补集 2.表示字符串开头 |
(1). [^a] 表示除了a之外的字符集,当^位于[]之中才做此用途 (2). [^\s] 表示除了空白类字符之外的所有字符集 (1). ^abc 表示希望匹配的字符串以abc开头 |
$ |
1.表示字符串结尾 2.$N 表示匹配后,被正则中第N个括号所获取的内容 |
(1). abc$ 表示希望匹配的字符串以abc结尾 |
其他字符:
代码 |
说明 |
举例 |
g |
1.在javascript中,置于正则表达式末尾,例如:var x=/abc/g, 或者作为RegExp的第2个参数, 例如:var x=new RegExp("abc","g"); 表示搜索整个字符串。 2.与i或m一起使用 |
(1). /a\d/g 去匹配字符串"a1bca2cda3xx" 可以得到 "a1","a2","a3" 3个匹配。 (1). var x=/abc/gi; (2).var x=new RegExp("abc","gi"); |
i |
1.在javascript中,置于正则表达式末尾,例如:var x=/abc/i, 或者作为RegExp的第2个参数, 例如:var x=new RegExp("abc","i"); 表示匹配时,不区分大小写。 2.与g或m一起使用 |
/ab/i 可以匹配ab, 也可以匹配AB 或者 aB, Ab |
m |
1.在javascript中,置于正则表达式末尾,例如:var x=/abc/m, 或者作为RegExp的第2个参数, 例如:var x=new RegExp("abc","m"); 表示匹配时,将字符串看作多行,每行结尾都有一个$。 2.与g或i一起使用 |
alert(/ab$/m.test("ab\r\nabc")) 将会弹出true, 而alert(/ab$/.test("ab\r\nabc")) 则是弹出false |
\ |
1.作为转义符号 2其后加数字表示后向引用 3.其后加数字表示八进制数(当\后面的数字大于之前所能获取的匹配数目时) 4.\ 参与的转义字符 |
(2). \1 表示上一个被获取的匹配, aTa用/(\w)T\1/匹配时,\1表示(\w)中被匹配的a (3). \777 表示匹配八进制数0777 |