[js]正则篇
一、正则基本概念
1、一种规则、模式、文本处理工具
2、强大的字符串匹配工具
3、在js中常与字符串函数配合使用
二、js正则写法
正则在js中以正则对象存在;
(1)var re=new RegExp(正则表达式);
(2)var re=/正则表达式/;
三、正则的基本写法
1、开始结束符 ^ $
2、元字符
(1)任意字符 [abc] abc中的任意一个
(2)范围 [a-z] 字母a到c; [1-9] 数组1到9
(3)排除 [^a-z] 排除字母a-c
(4)任意字符 .
3、量词
(1) {n} 出现n次
(2) {n,m} 最少n次,最多m次
(3) + 任意次 >0次
(4) ? 最少0次 最多1次
(5) * 可有可无
4、转译字符
\d 数字 \D 非数字
\w 数字、字母、下滑线 \W 非数字 字母 下划线
\s 空白字符 \S 非空字符
\b是单词边界 \B非单词边界 (用于位置匹配,\W和\w间的位置)
5、其他字符
i 忽略大小写 例 re=/a/i A或者a
g 全局搜索 例 re=/\d/g 全部数字
m 多行查找 例 re =/\d/m
四、字符串使用函数
1. str.search(re) //搜索匹配字符,返回位置,如果找不到,返回-1。
2. str.math(re) //搜索字符串,返回匹配字符数组
3. str.replace(re,'替换字符') //搜索字符串,替换匹配字符
五、正则对象方法
4. re.test(str) //测试字符串是否满足正则,返回布尔值
5. re.exec(str) //类似字符串方法match
六、正则的使用
1、示例:
----------------------------------------------------------
示例 测试邮箱格式
邮箱格式: 用户名 @ 邮箱名 . com/cn
字符类型: 字符 数字 下划线 @ 字母 数字 . 字母
正则字符: \w @ [a-z 0-9] [a-z]
量词: + 1 + +
re=/^\w+@[a-z 0-9]+\.[a-z]+$/g
-----------------------------------------------------------
2、贪婪特性:
获取所有html标签
re=/^<.+>/g; 会匹配第一个《 到最后一个> 中间内容全部当做.处理
改进:
re=/^<[^<]+>/$/g;
re=/^<.*?>/$/g;
3、惰性匹配
通过在量词后面加个问号就能实现惰性匹配
如:var regex = /\d{2,5}/g; 改为 var regex = /\d{2,5}?/g;
4、位置配置
(1)正向先行断言 (?=p),正向先行断言会查看并确保搜索匹配模式中的元素存在,但实际上并不匹配。正向先行断言的用法是(?=...),其中...就是需要存在但不会被匹配的部分
(2)负向先行断言 (?!p) ,正向先行断言会查看并确保搜索匹配模式中的元素存在,但实际上并不匹配。正向先行断言的用法是(?=...),其中...就是需要存在但不会被匹配的部分
let quit = "qu"; let noquit = "qt"; let quRegex= /q(?=u)/; let qRegex = /q(?!u)/; quit.match(quRegex); // Returns ["q"] noquit.match(qRegex); // Returns ["q"]
5、捕获组
捕获组就是把正则表达式中子表达式匹配的内容,保存到内存中以数字编号或显式命名的组里,方便后面引用
例如: /(a)(b)(c)/中的捕获组编号为
- 组
0:abc - 组
1:a - 组
2:b - 组
3:c
其中,组0是正则表达式整体匹配结果,组1`2`3才是子表达式匹配结果,使用match方法匹配放回数组;
- 子表达式捕获组编号从
1开始,顺序从左到右(例如编号1是左侧第一个()包裹的子表达式的结果) - 可以在正则表达式中对前面捕获的内容进行引用(反向引用)
- 也可以在程序中,对捕获组捕获的内容进行引用(比如
replace中)
var str = "2017-07-29"; var reg = /(\d{4})-(\d{2})-(\d{2})/; // 非全局模式有捕获组结果 str.match(reg); // ["2017-07-29", "2017", "07", "29", index: 0, input: "2017-07-29"]
6、非捕获组 (?:p)
六、常用正则表达式
1、中文校验
^[\\u4e00-\\u9fa5]{0,}$
2、密码强度
^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$
3、数字字母下划线组成的字符串
^\\w+$
4、身份证
15位:^[1-9]\\d{7}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}$
18位:^[1-9]\\d{5}[1-9]\\d{3}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}([0-9]|X)$
5、日期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)$

浙公网安备 33010602011771号