1. 正则表达式
1.1. 什么是
规定一个字符串中字符出现规律的规则
1.2. 何时
- 按照指定规则模糊查找一类关键词时
- 表单中验证输入项的格式
1.3. 语法
1.3.1. 最简单的正则表达式, 是关键词原文本身
1.3.2.字符集
-
什么是: 规定一位字符可用的备选字符列表的集合
-
何时: 只要一位字符, 有多种可能备选字时
-
如何:
[备选字符列表] -
强调: 一个字符集只能规定一位字符的备选字符列表
-
简写: 如果字符列表中部分字符是连续的, 可用 - 省略中间字符
[0-9]: 一位数字[a-z]: 一位小写字母[A-Z]: 一位大写字母[A-Za-z]: 一位字母[0-9A-Za-z]: 一位字母或数字[\u4e00-\u9fa5]: 一位汉字
-
特殊: 除了:
[^排除的字符列表]-
强调:
^必须写在[ 开头 ]
-
1.3.3. 预定义字符集
- 什么是: 对常用字符集的简写 -> 4 个
\d: 一位数字 ->[0-9]\w: 一个字母 / 数字 / _ ->[0-9A-Za-z_]\s: 一位空字符 -> 空格 / tab.: 通配符 -> 一个任意字符
1.3.4. 量词
专门规定相邻的前一个字符集出现次数的规则
- 何时: 只要规定字符集出现的位数 / 次数
- 如何: 量词必须紧跟在字符集之后, 修饰相邻的前一个字符集
- 包括: 2 大类
- 有明确数量边界的:
字符集{n,m}: 至少 n 个, 最多 m 个字符集{n,}: 至少 n 个, 多了不限字符集{n}: 必须 n 个
- 没有明确数量边界的:
字符集?: 可有可无, 最多 1 个字符集*: 可有可无, 多了不限字符集+: 至少一个, 多了不限
- 有明确数量边界的:
1.3.5. 选择和分组
- 选择:
多个规则, 只要匹配其一即可
-
语法:
规则1 | 规则2 | ... -
强调:
|在正则中, 优先级最低
- 分组:
用
()将多个规则分为一组
- 何时: 如果希望量词同时修饰多个字符集时, 就要先将多个字符集分为一组, 再用量词修饰分组
- 为什么: 默认字符集仅修饰相邻的前一个字符集
- Ex:
- 身份证号: 15 位数字 + 2 位数字 + 1 位数字或Xx
/\d{15}(\d\d[\d|Xx])?/
- 手机号:
- 规则: 1. +86 / 0086 -> 可有可无,最多一次 2. 空字符可有可无, 多了不限 3. 1 4. 3, 4, 5, 7, 8 选一个 5. 9位数字
/(\+(00)?(86)?)?\s*1[34578]\d{9}/
- 屏蔽 微信 /
weixin/wx(微|W|w(ei)?)\s*(信|X|x(in)?)
- 身份证号: 15 位数字 + 2 位数字 + 1 位数字或Xx
1.3.6. 指定匹配位置: 3 种
^: 字符串开头 -> Ex: 字符串开头的空字符:^\s+$: 字符串结尾 -> Ex: 字符串结尾的空字符:\s+$- Ex: 开头或结尾的空字符 ->
^\s+|\s+$ - 固定套路: 1. 只要希望字符串和正则从头到尾完全匹配 -> 同时前加
^后加$2. 只要用正则表达式执行验证时, 必须前加^后加$
- Ex: 开头或结尾的空字符 ->
\b: 单词边界- 单词首字母:
\b[a-zA-Z] - 单词尾字母:
[a-zA-Z]\b - 单独的一个单词 no:
\bno\b
- 单词首字母:
2. RegExp
2.1. 什么是
专门封装一条正则表达式, 并使用正则表达式执行查找和验证的
API
2.2. 何时
- 使用正则表达式验证用户输入的格式
- 即查找关键词内容, 又查找关键词位置
2.3. 如何
2.3.1. 创建: 2 种
-
直接量:
var reg = /正则/ig-
何时: 如果正则表达式是固定不变的
-
强调:
//之中如果再出现/, 就必须改为\/
-
-
用
new:var reg = new RegExp("正则","ig")-
何时: 如果正则表达式需要动态拼接生成
-
强调: "" 中再出现
\或", 都要改为\\和\"
-
2.3.2. API: 2个
- 即查找内容, 又查找位置:
var arr = reg.exec(str): 在str中查找下一个符合reg规则的关键词- 返回值: 返回一个数组
arrarr[0]: 本次找到的关键词的内容- 如果正则中有分组:
arr[n]: 自动保存第n个分组匹配的子内容
- 如果正则中有分组:
arr["index"]: 本次找到的关键词的位置- 如果没找到, 返回
null
- 原理: 每次查找3件事
- 将本次找到的关键词保存在
arr的 0 位置 - 将本次找到的关键词位置保存在
arr的index位置 - 每个
reg对象都有一个lastIndex属性, 标识下次开始的查找位置 -> 开始时为 0 每执行完一次exec,exec会自动修改lastIndex为: 当前位置 + 关键词长度**
- 将本次找到的关键词保存在
- 验证格式:
var bool = reg.test(str): 验证str是否符合reg规则要求- 验证通过返回
true, 不通过返回false - 问题: 默认正则只要找到部分匹配就返回
true- 解决: 凡是验证, 必须前加
^, 后加$
- 解决: 凡是验证, 必须前加