正则表达式快速入门
基础用法
- \d 匹配一个 数字
- \D 非数字
- \w 匹配一个字母和数字
- \W 非单词字符
- . 匹配任意一个字符
- \s 匹配一个空白符 ,包括\b,\t ,tab键和space键
- \S 非空白字符
- 其他任意字符可以用转义字符匹配,例如 ’,‘可以用 , 来转义匹配 ‘-’ 可以用==
\-
==或者使用字符集[-],[,]表示
表示长字符串
-
一个匹配符后面加一个==+号则代表贪婪匹配,至少匹配一个相对应的字符,例如\s+匹配至少一个空格或\t,\d+== 代表至少匹配一个数字
-
*号表示匹配任意个字符长度(也包括0个字符)
-
==?==表示可能是零个或者一个字符
-
=={n}表示可以匹配n个字符,{n,m}==表示可以匹配n~m个字符
基础用法与长字符表示相结合
例子
\d{5} //表示需要匹配五个数字
\@? //表示可能有一个"@"符号或者没有
\w{4,9} //表示需要匹配4~9个数字和单词
[1-9][0-9]{4,} //({4,}表示[0-9]的数字个数不低于4个)
进阶
- 用==[]==符号进行限定范围进行匹配
[0-3][0-9]//表示第一位数字从0~3匹配,第二位数字在0~9匹配;
[0-9a-zA-Z\_]//可以匹配一个数字、字母或者下划线;
[0-9a-zA-Z\_]+//可以匹配至少由一个数字、字母或者下划线组成的字符串,比如'a100','0_Z','js2015'等等;
[a-zA-Z\_\$][0-9a-zA-Z\_\$]*//可以匹配由字母或下划线、$开头,后接任意个由一个数字、字母或者下划线、$组成的字符串,也就是JavaScript允许的变量名;
[a-zA-Z\_\$][0-9a-zA-Z\_\$]{0, 19}//更精确地限制了变量的长度是1-20个字符(前面1个字符+后面最多19个字符)
[abc]与[a-c]等价
[^abc] //的^表示取反 表示不是abc的其他字符
在[]中特殊字符失去特殊含义 若要使用,先在前面加上反斜杠==后面补充==
- A|B 匹配A或B ,例如
(H|h)ello,(W|w)orld!
//可得"hello,world!"或"Hello,World!"或"Hello,world!"或"hello,World!"
-
一行正则表达式需要一个开头和结尾 ,而==^和$==则可以表示这俩个作用
-
^表示一行正则表达式的开头
-
$表示一行正则表达式的结束
^abc$ //只能匹配abc
补充
分组
在正则表达式中可以使用()来进行分组
//在JavaScript中 exec函数用于分离分组为数组类型
var re = /^(\d{3})-(\d{3,8})$/;
re.exec('010-12345'); // ['010-12345', '010', '12345']
re.exec('010 12345'); // null
//这样就能快速提取重要信息
var re = /^(0[0-9]|1[0-9]|2[0-3]|[0-9])\:(0[0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9]|[0-9])\:(0[0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9]|[0-9])$/;
re.exec('19:05:30'); // ['19:05:30', '19', '05', '30']
贪婪匹配
var re = /^(\d+)(0*)$/;
re.exec('102300'); // ['102300', '102300', '']
//后面的0不能被提取到,因为被\d+提取了
//前面的\d+太贪婪了
//非贪婪匹配
var re = /^(\d+?)(0*)$/;
re.exec('102300'); // ['102300', '1023', '00']
使 *+?{m,n} 变成非贪婪匹配
*?+???{m,n}?
特殊组合:
([\s\S]*?) == ([.\n]*?) == re.findall(‘.*?‘, re.S)
万能正则表达式 (加‘?’表示懒惰模式,尽可能最小长度匹配; 不加‘?’表示贪婪模式,尽可能最大长度匹配)
\s\S : 空白字符+非空白字符,即表示所有字符 all, == ’ .\n ‘(.表示除换行符之外的任意字符,\n表示换行符)
re.S: 即DOTAALL 点匹配任意模式,改变.的行为,可以匹配换行符
常用正则表达式
转载 验证数字的正则表达式集 - steven_2005 - 博客园 (cnblogs.com)
验证数字:^[0-9]*$
验证n位的数字:^\d{n}$
验证至少n位数字:^\d{n,}$
验证m-n位的数字:^\d{m,n}$
验证零和非零开头的数字:^(0|[1-9][0-9]*)$
验证有两位小数的正实数:^[0-9]+(.[0-9]{2})?$
验证有1-3位小数的正实数:^[0-9]+(.[0-9]{1,3})?$
验证非零的正整数:^\+?[1-9][0-9]*$
验证非零的负整数:^\-[1-9][0-9]*$
验证非负整数(正整数 + 0) ^\d+$
验证非正整数(负整数 + 0) ^((-\d+)|(0+))$
验证长度为3的字符:^.{3}$
验证由26个英文字母组成的字符串:^[A-Za-z]+$
验证由26个大写英文字母组成的字符串:^[A-Z]+$
验证由26个小写英文字母组成的字符串:^[a-z]+$
验证由数字和26个英文字母组成的字符串:^[A-Za-z0-9]+$
验证由数字、26个英文字母或者下划线组成的字符串:^\w+$
验证用户密码:^[a-zA-Z]\w{5,17}$
正确格式为:以字母开头,长度在6-18之间,只能包含字符、数字和下划线。
验证是否含有 ^%&',;=?$\"
等字符:[^%&',;=?$\x22]+
验证汉字:^[\u4e00-\u9fa5],{0,}$
验证Email地址:^\w+[-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$
验证InternetURL:^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$ ;^[a-zA-z]+://(w+(-w+)*)(.(w+(-w+)*))*(?S*)?$
验证电话号码:^(\(\d{3,4}\)|\d{3,4}-)?\d{7,8}$
:–正确格式为:XXXX-XXXXXXX,XXXX-XXXXXXXX,XXX-XXXXXXX,XXX-XXXXXXXX,XXXXXXX,XXXXXXXX。
验证身份证号(15位或18位数字):^\d{15}|\d{}18$
验证一年的12个月:^(0?[1-9]|1[0-2])$ 正确格式为:“01”-“09”和“1”“12”
验证一个月的31天:^((0?[1-9])|((1|2)[0-9])|30|31)$ 正确格式为:01、09和1、31。
整数:^-?\d+$
非负浮点数(正浮点数 + 0):^\d+(\.\d+)?$
正浮点数 ^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$
非正浮点数(负浮点数 + 0) ^((-\d+(\.\d+)?)|(0+(\.0+)?))$
负浮点数 ^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$
([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$
非正浮点数(负浮点数 + 0) ^((-\d+(\.\d+)?)|(0+(\.0+)?))$
负浮点数 ^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$
浮点数 ^(-?\d+)(\.\d+)?$