正则表达式是一个描述字符模式的对象。
一、正则表达式的语法
一个正则表达式就是由普通字符(如字符a~z)以及特殊字符(称为元字符)组成的模式字符串,用于描述在查找文字主体时待匹配的一个或多个字符串。
1、字符类
指用于匹配的字符的组合。
正则表达式的字符类
字符类 |
说明 |
示例 |
[···] |
匹配方括号中字符序列中的任意一个字符。其中,可以使用连字符“-”匹配指定范围内的任意字符 |
/[012]/可以与0A1B2C中的字符0、1或2匹配 /[0-5]/可以与a0e1w2g3h4k5中的0~5之间的任意数字字符匹配 |
[^···] |
匹配方括号内字符序列中未包含的任意字符。其中,可以使用连字符“-”匹配不再指定范围内的任意字符 |
/[012]/可以与0A1B2C中除0、1或2三个字符之外的任意字符匹配,这里可以与字符A、B或C匹配 /[^a-z]/可以与aB123hwZ中不在a~z之间的任意字符匹配 |
. |
除了换行和回车之外的任意字符,相当于[^ ] |
|
d |
匹配任意一个数字字符,相当于[0-9] |
/d/可以与w7gh中的字符7匹配 |
D |
匹配非数字字符,相当于[^0-9] |
/D/可以与w7gh中的字符w、g或h匹配 |
s |
匹配任意空白字符,如空格、制表符、换行符等等,相当于[ x0Bf ] |
/sd/可以与my book 71th中的7匹配 |
S |
匹配任何非空白字符,相当于[^ x0Bf ] |
/S/可以与AB中的A或B匹配 |
w |
匹配任何英文字母、数字以及下划线,相当于[a-zA-Z0-9] |
/w/可以与w4F_71-+中的字母、数字和下划线匹配 |
注意:使用[^···]时,如果字符"^"不是出现在第一个"["的后面,则仍表示字符"^"字符的原义。
2、量词
在正则表达式中,使用量词可以控制字符或字符串出现的次数。
正则表达式的量词
量词 |
说明 |
示例 |
? |
匹配前一项0次或1次 |
/JS?/可以匹配JScript中的JS或者JavaScript中的J |
+ |
匹配前一项一次或多次,但至少出现一次 |
/JS+/可以匹配包含JS或者JSSSS的字符串,即可以与在字母J后面连续出现一个或多个字母S的字符串相匹配 |
* |
匹配前一项0次或多次(任意次) |
/bo*/可以匹配包含b、bo或者booo的字符串 |
{n} |
匹配前一项恰好n次,其中n为非负整数 |
/0{2}/可以与book中的两个o相匹配,可以与booook中的任意两个连续的o相匹配 |
{n,} |
匹配前一项至少n次 |
/0{2,}/不可以与home中的o匹配,但可以与good或者goooood中的所有o相匹配 |
{n,m} |
匹配前一项至少n次,但不能超过m次,其中n和m是非负整数,并且n<=m |
/o{2,5}/可以与book中的两个o、与booooooook中5个连续的o匹配 |
3、指定匹配的位置
指定匹配位置的方式
字符 |
说明 |
示例 |
^ |
匹配字符串的行开头。字符”^"必须出现在指定字符串的最前面才起作用 |
/^g/与good中的字符g匹配,但与bag中的字符g不匹配 |
$ |
匹配字符串的行结尾。字符"$"必须出现在指定字符串的最后面才起作用 |
/g$/与bag中的字符g匹配,但与good中的字符g不匹配 |
匹配单词的边界 |
/e/与I love seek中的love中的e相匹配,但与seek中的e不匹配 | |
B |
匹配非单词的边界 |
/eB/与I love seek中的seek中的e相匹配,但与love中的e不匹配 |
4、选择匹配符
正则表达式的选择匹配符只有一个,即“|”院子符。使用选择匹配符可以匹配所指定的两个选项中任意一项。例如:/World|Dream/可以与“One World,One Dream"中的World或者Dream匹配
5、分组