js正则表达式
正则表达式(Regular Expression),是用来规范字符串的一种表达式。可以对字符串进行查找、替换(删除和格式化)、切割和各种验证。
正则表达式——使用规则
1、最简单的正则表达式:关键词的原文
2、字符集:规定一个字符的规则
[ab我] 表示在a,b,我三个选项中任意一个匹配成功
如果备选字符列表中个别字符之间是连续的,可以使用“-”省略中间的字符。如:
[0-9]:一位数字 [a-z]:一位小写字母 [A-Z]:一位大写字母 [a-zA-Z]:以为字母 [\u4e00-\u9fa5]:一位汉字
字符集开头,如果使用了“^”表示除了“^”后的字符
3、预定义字符集:对常用字符集的简化标识
\d <==> [0-9] :一位数字 \w <==> [0-9a-zA-Z_] :以为字母,数字或下划线 \s : 一位空字符,包括换行、空格、制表符(tab) . : 除回车换行外的任意一个字符
以上预定义字符集中表示的字符集是固定的。
4、量词:规定字符集出现的次数
4.1 量词一般用于字符集之后,默认修饰量词前一个字符集,有明确数量的量词:
{m,n} : 最少出现m次,最多n次
如:1[3578]{3,6} ,表示“[3578]”字符集中的3,5,7,8四个字符最少出现3次,最多出现6次
{m,} : 最少出现m次,没有上限
如:1[3578]{3,6} ,表示“[3578]”字符集中的3,5,7,8四个字符最少出现3次
{m} : 必须出现m次
如银行卡密码:[0-9]{6} ,表示只能是六位数字
4.2 没有明确数量的量词
? : 可有可无,最多出现一次
* : 可有可无,没有上限
+ : 至少出现一次,没有上限
5、分组和选择
选择:类似于程序中的“或”,用“|”表示,只要满足“|”符号两边的正则表达式任意一个正则即可。(正则中“|”的优先级最低)如: 15|8 ,表示匹配“15”或者“8”
分组:用“()”表示,小括号“()”中内容表示一组,如果数量词放在“()”之后,则表示把“()”中内容看作一个整体,而量词用来修饰这个整体。
注意:正则中如果正文和正则保留符号冲突,可以用“\”转义。
6、指定匹配位置
“^”:表示开始位置,一般用于正则表达式的开头,匹配开始位置的,表示以...开头
“$”:结束位置前的,一般用于结尾,以...结尾
如: ^\s+ 匹配开头位置的多个空字符
\s+$ 匹配结尾位置的多个空字符
^\s+|\s+$ 匹配开头或结尾的空字符
如果前有“^”,后有“$”,表示从头到尾完整匹配 ——验证
注意:只要是验证,都需要完全匹配,故前加“^”后加“$”
7、分组编号
正则中每个“()”,正则都会对其自动生成从1开始的编号。如果后边想匹配和前面某个分组完全相同的内容,可用“\n”匹配,如:
(\d)\1* 匹配相邻数字重复的字符
(.)\1* 匹配和第一个字符完全相同的重复字符
如:数组去重复,先将数组用join函数以“,,”为分隔符转为字符串。正则表达式如下:
(^|,)([^,])(,,\2)*
解析:①第一部分:“(^|,)”,匹配开头有或者没有“,”;
②第二部分:“([^,])”:除了“,”以后的其他字符;
③第三部分:“(,,\2)”:表示第二部分后面有两个“,”和第二部分本身,第三部分会出现一次或多次。
如:字符串“a,,a,,b,,c,,c,,c,,d,,d”使用正则查找后的结果是“a,,a”、“,c,,c,,c”和“,d,,d”
8、预判
提前检查整个字符串是否符合个别要求,相当于“而且”,用“(?)”,如:
密码强度的要求:8位字符,必须是字母、数字的组合;要求:1)至少包含一位大写字母;2)包含以为数字
分析:1)判断不全由小写字母和数字组成。(说明可能包含大写字母或特殊符号)
(?![0-9a-z]+$)
// 从开头到结尾的字符是不是都满足要求,"?"表示从头开始;“+$”表示一直检查到结尾
2)判断不全由字母(大写和小写)组成。(说明可能包含数字或特殊符号)
(?![a-zA-Z]+$)
3)只能由数字和字母组成。(排除特殊符号)
[0-9a-zA-Z]{8}
4)最后结果:
(?![0-9a-z]+$)(?![a-zA-Z]+$)[0-9a-zA-Z]{8}
9、正则应用示例
(1) 身份证号,共15位或18位:1)前15位数字;2)接着2位数字;3)最后一位,可能是数字、X或x中的任意一个;4)最后三位为一组,可有可无,最多出现一次。结果:
\d{15}(\d{2}[0-9Xx])?
(2) 手机号:1)+86或0086,整体可有可无,最多出现1次;2)空字符,可有可无,最多不限;3)[34578];4)9位数字,结果:
(\+86|0086)?\s*1[34578]\d{9}

浙公网安备 33010602011771号