前言
- 正则表达式,对字符串进行模式匹配的工具对象。一般对象都有两种创建方式:
- 对象示例,通过new obj() 类似的方式
- 直接量语法,也就是直接赋值。var pattern=/^$/ 备注:目前建议的是perl风格的正则表达式,简易易懂。
简单了解
标准语法
- 创建的语法 : new RegExp(pattern, attributes); 其中pattern代表匹配模式,arrtibutes代表匹配限制,匹配限制中有g,i,m,g代表执行全局匹配,i代表执行大小写不敏感的匹配,m代表多行匹配。
- 举例 [A-z] 大写A到小写z之间的字符 [0-9]0-9之间的任意数字 [^avb] 不属于avb之间的字符
- 正则对象的常用方法 reg.test(str) 返回布尔型数据 ,可以检测是否符合规则
- 拓展:String对象对正则的使用 search(reg) ;match(reg),split(reg),replace(reg,str),etc...
正则对象语法
-
元字符,用来匹配的基本字符,直接量字符
-
正则量词(出现次数)
-
选择 分组和引用
| 选择 或者 ()组合 将几个项组合为一个单元,这些单元可以通过数量修饰以及|连接 (?:...)只组合,把项组合到一个单元,但不记忆与该组相匹配的字符。 \n 和第n个分组第一次匹配的字符相匹配。
- 指定匹配位置与修饰符
?! 负向断言,当不符合前面的匹配时,后面的语句不在进行匹配。 ^ 匹配的开始 $ 匹配的结束 \b 单词的边界 \B 非单词的边界 修饰符
i 执行不区分大小写的匹配 g执行全局的匹配,找到所有的匹配,而不是找到一个后停止 m 多行匹配模式
- 用于模式匹配的String 的方法
search(patt) 返回第一个匹配的指针位置 replace(patt) 吧复合匹配规则的字符串替换为规定的字符串 match(patt) 返回匹配的字符串数组,如果没有返回null,如果设置了修饰符g则会返回所有的复合结果,否则返回第一个。返回的属性是index和input split(patt) 可以按照指定的模式划分
- 对象方法:
- exec(str)与str.match(patt)有点类似,如果找不到返回null,如果能找到,返回一个数组。返回的第一个元素是与表达式匹配的字符串,余下的元素是与圆括号内的子表达式相匹配的子串。属性index包含了匹配发生的位置,属性input引用的是正在检索的字符串。与match不同的是,不管是否具有g属性修饰,返回的都是数组。
- test(str) 返回布尔型,符合规范是true,不符合是false
- patt1.compile(patt2),改变patt 的内容
- 常用的正则表达式枚举:
- /^[1][0-9]{10}$/ 11位的手机号,以1开始的
- /^([a-zA-Z]{2,5})$/ 邮箱
- /^[0-9]{6}$/ 6位的数字验证码
- 姓名
- 身份证号
- 地址
- 密码
常用正则写法
1、校验密码强度 密码的强度必须包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间 ^(?=.\d)(?=.[a-z])(?=.*[A-Z]).{8,10}$
2、校验中文 字符串只能是中文 ^[\u4e00-\u9fa5]{0,}$
3、由数字,26个英文字母或下划线组成的字符串 ^\w+$
4、校验E-Mail 地址 [\w!#%&'+/=?^_`{|}~-]+)@(?:?\.)+?
5、校验身份证号码 15位: ^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}
6、校验日期 “yyyy-mm-dd“ 格式的日期校验,已考虑平闰年 ^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$
7、校验金额 金额校验,精确到2位小数 ^[0-9]+(.[0-9]{2})?$
8、校验手机号 下面是国内 13、15、18开头的手机号正则表达式 ^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$
9、判断IE的版本 ^.*MSIE ?(?!.Trident\/[5-9]\.0).$
10、校验IP-v4地址 \b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b
11、校验IP-v6地址 (([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))
12、检查URL的前缀 if (!s.match(/^[a-zA-Z]+:\/\//)){ s = 'http://' + s;}
13、提取URL链接 ^(f|ht){1}(tp|tps):\/\/([\w-]+\.)+[\w-]+(\/[\w- ./?%&=]*)?
14、文件路径及扩展名校验 ^([a-zA-Z]\:|\\)\\([^\\]+\\)[^\/:?"<>|]+\.txt(l)?$
15、提取Color Hex Codes ^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$
16、提取网页图片 \< [img][^\\>][src] *= [\"\']{0,1}([^\"\'\ >])
17、提取页面超链接 (<a\s*(?!.\brel=)[^>])(href="https?:\/\/)((?!(?:(?:www\.)?'.implode('|(?:www\.)?', $follow_list).'))[^"]+)"((?!.\brel=)[^>])(?:[^>]*)>
18、查找CSS属性 ^\s*[a-zA-Z\-]+\s*[:]{1}\s[a-zA-Z0-9\s.#]+[;]{1}
19、抽取注释
20、匹配HTML标签 <\/?\w+((\s+\w+(\s*=\s*(?:".?"|'.?'|[\^'">\s]+))?)+\s*|\s*)\/?>
相关教程:
- (不需要写双斜线)