本篇章介绍正则表达式,分为上定义正则表达式(上)、字符串中的正则API和RegExp对象(下)两部分
正则表达式(Regular Expression):专门描述字符串中字符出现规则的表达式。
因为程序不认识人类语言中的词汇,所以才需要程序员用正则表达式教程序认识人类语言中的词汇。
1.定义正则表达式
1.1 普通字符
- 直接通过完整字符进行匹配。
比如:
正则表达式为:西南大学;
匹配字符串为:西南大学。
1.2 字符集
(1)普通字符集
-
当在规则中需要某一字符拥有多种备选字时,可以使用字符集形式进行匹配。匹配时,只要与”[]”中的任意字符相匹配,就满足规则。
-
语法
:[备选字符集] -
比如:
正则表达式为:[西南][大学]; 匹配字符串为:西大、西学、南大、南学。
(2)字符集简写形式
-
由于正则表达式经常使用字符集,所以可以使用字符集简写形式方便使用:
①[0-9]:匹配0-9中的一位数字;
②[a-z]:匹配a-z中的一位小写字母;
③[A-Z]:匹配A-Z中的一位大写字母;
④[A-Za-z]:匹配一位字母;
⑤[0-9A-Za-z]:匹配一位数字或者字母;
⑥[\u4e00-\u9fa5]:匹配一位汉字。 -
比如:
利用字符集简写形式定义车牌号规则:[\u4e00-\u9fa5][A-Z]·[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]
(3)预定义字符集
-
正则表达式语法为四种常用的字符集定义了最简化的写法,称为预定义字符集。
①\d:匹配一位数字;
②\w:匹配一位字符、数字或_,等效于[0-9A-Za-z_];
③\s:匹配一位空字符,可以匹配空格、制表符Tab等空白;
④.:匹配所有文字(通配符)。 -
比如:
利用预定义字符集简写手机号规则: 1[3-8]\d\d\d\d\d\d\d\d\d
1.3 数量词
(1)普通数量词
数量词是专门规定一个字符集出现次数的规则。只要一个字符集在规则中可能连续反复出现多次,就可以用数量词以简写方式定义出现次数。
数量词紧跟在其修饰的字符集之后,默认修饰相邻的前一个字符集。
-
比如:
手机号中连续的9个数字\d,可进一步简写为: 1 [3-8] \d{9} 利用数量词进一步简写手机号规则: 1[3-8]\d{9} 利用数量词进一步简写车牌号规则: [\u4e00-\u9fa5][A-Z]·[0-9A-Z]{5}
(2)有明确数量边界的数量词
- 字符集{n}: 表示字符集必须重复n次,不能多也不能少;
字符集{n,m}: 表示字符集至少重复n次,最多重复m次;
字符集{n,}: 表示字符集匹配的内容至少重复n次,多了不限。
(3)有明确数量边界的数量词
* 可有可无,多了不限;
? 可有可无,最多一次;
+ 至少一次,多了不限。
1.4 选择和分组
(1) 选择
-
选择,是指在多个子规则中选其一匹配。当需要在多个子规则中选其一匹配时,就可以使用选择。
-
语法:
子规则1|子规则2
注意:“|”选择符只分左右,不考虑单个字符。 -
比如:
正则表达式为:西南|大学; 匹配字符串:西南、大学。
(2) 分组
-
分组,将多个子规则视为一组,再和分组外的规则匹配。当希望将多个子规则视为一个整体,再和其它规则匹配时,就可以使用分组。
-
语法:
其它规则 (多个子规则) -
比如:
正则表达式为:西([南大]|学); 匹配字符串为:西南、西大、西学。
1.5 指定匹配位置
-
在一个字符串中有三个位置比较特殊:字符串开头、字符串结尾以及英文字母中每个单词中间的空白部分(单词边界)。如果只希望匹配特殊位置上的关键词时,则可以使用特殊符号表示特殊位置:
(1)^ 表示字符串开头;
(2)$ 表示字符串结尾;
(3)\b 表示单词边界,它可以匹配空格、标点符号、字符串开头或结尾等可以将一个单词与其他单词分隔开的符号。 -
比如:
匹配开头的空字符串: ^\s+ 找到每个单词的首字母: \b[a-z]