1. ****正则表达式:
什么是: 定义字符串中字符出现规则的表达式
何时使用: 查找 替换 验证
如何定义正则:
1.最简单的正则: 关键词原文
2.备选字符集: 规定一位字符可用的备选字符列表
何时使用: 如果规定字符串中一位字符可能出现的情况
如何定义: [备选字符列表]
强调: 1. 一个中括号,只能匹配一个字!
2. 正则表达式不能仅匹配部分规则。
特殊: 1. 如果备选字符集中有部分连续字符:
可用-省略中间字符
比如:一位数字:[0-9]
一位字母:[a-zA-Z]
一位数字,字母或下划线: [0-9a-zA-Z_]
一位汉字:[\u4e00-\u9fa5]
2. 除了xxx之外,其他都行
[^xxx] 问题: 范围太广!
3. 预定义字符集: 专门对常用字符集的简化写法:
一位数组: \d => [0-9]
一位字母,数组或下划线: \w => [a-zA-Z0-9_]
一位空白字符: \s 包括: 空格,换行,制表符
一位除换行外的任意字符: .
问题: 预定义字符集是固定的,不灵活
解决: 需求和预定义字符集完全匹配,优先用预定义字符集。如果需求和预定义字符集不完全匹配,就只能自定义普通字符集。
4. 量词: 规定一个字符集出现次数的规则
何时使用: 只要规定一个字符集出现的次数
1. 有明确数量:
{n,m}:前边相邻的字符集,最少出现n次,最多出现次
{n,}: ......最少出现n次,多了不限!
{n}: ......只能n位
2. 没有明确数量:
?: 可有可无,但最多1个
*: 可有可无,数量不限
+: 至少1个,多了不限
5. 选择和分组:
选择: 在两个规则中二选一匹配
规则1|规则2
分组: 将多个字符集临时组合成一组子规则
(多个字符集组成的临时子规则)
比如: 身份证号: 15位数字 \d{15}
2位数字 \d\d
1位 数字或X或x [0-9Xx]
后三位可有可无,最多一次!
\d{15}(\d\d[0-9Xx])?
手机号: +86或0086 可有可无,最多一次
空字符 可有可无,多了不限
1
在3,4,5,7,8中选一个
9位数字
(+86|0086)?\s*1[34578]\d{9}
6. 指定匹配位置:
开头和结尾: ^表示字符串的开头位置
$表示字符串的结尾位置
特殊:默认正则表达式值匹配字符串的一部分即可
如果希望完整匹配: 前加^,后加$
单词边界: \b 开头,结尾,空格
密码强度: 8位字母,数字的组合
至少一位大写字母和一位数字
1. 预判整个字符串,从头到尾不只由字母组成
结论: 可能有数字,或特殊符号
(?![a-zA-Z]+$)
2. 预判整个字符串,从头到尾不只由小写字母和数字组成
结论: 可能有大写字母,或特殊符号
(?![a-z0-9]+$)
如果前两个条件都满足,说明:
可能有数字,大写字母,或特殊符号
3. 只能是8位字母或数字的组合:
[a-zA-Z0-9]{8} —— 排除了特殊符号
^(?![a-zA-Z]+$)(?![a-z0-9]+$)[a-zA-Z0-9]{8}$
2.****String中支持正则的API:
查找 替换(删除 格式化) 切割
1. 查找:4种
1.查找一个*固定*的关键词,不支持正则
var i=str.indexOf("关键词",fromi);
仅返回下*一个*,关键词的位置!
2.仅判断有没有: var i=str.search(reg);
仅返回下*一个*,关键词的位置!
找不到,返回-1
优: 支持正则;
缺: 不支持设置开始位置,只能查第一个
*不支持g*,但是支持i
3.查找所有关键词的内容:var arr=str.match(reg)
强调: 1. 返回值: 所有匹配的关键词,组成的数组
数组的length属性,记录了关键词的个数
如果没找到:***返回null***!
解决: 先判断不是null,再使用
2. reg: /正则表达式/后缀
其中后缀: i 表示忽略大小写
g 表示全部
如果不加g,match也只能找第一个
优: 支持正则,支持g后缀,查找全部
缺: 只能返回关键词内容,无法返回每个关键词位置
4. 即查找内容,又查找位置: 正则表达式对象的exec方法
什么是: 定义字符串中字符出现规则的表达式
何时使用: 查找 替换 验证
如何定义正则:
1.最简单的正则: 关键词原文
2.备选字符集: 规定一位字符可用的备选字符列表
何时使用: 如果规定字符串中一位字符可能出现的情况
如何定义: [备选字符列表]
强调: 1. 一个中括号,只能匹配一个字!
2. 正则表达式不能仅匹配部分规则。
特殊: 1. 如果备选字符集中有部分连续字符:
可用-省略中间字符
比如:一位数字:[0-9]
一位字母:[a-zA-Z]
一位数字,字母或下划线: [0-9a-zA-Z_]
一位汉字:[\u4e00-\u9fa5]
2. 除了xxx之外,其他都行
[^xxx] 问题: 范围太广!
3. 预定义字符集: 专门对常用字符集的简化写法:
一位数组: \d => [0-9]
一位字母,数组或下划线: \w => [a-zA-Z0-9_]
一位空白字符: \s 包括: 空格,换行,制表符
一位除换行外的任意字符: .
问题: 预定义字符集是固定的,不灵活
解决: 需求和预定义字符集完全匹配,优先用预定义字符集。如果需求和预定义字符集不完全匹配,就只能自定义普通字符集。
4. 量词: 规定一个字符集出现次数的规则
何时使用: 只要规定一个字符集出现的次数
1. 有明确数量:
{n,m}:前边相邻的字符集,最少出现n次,最多出现次
{n,}: ......最少出现n次,多了不限!
{n}: ......只能n位
2. 没有明确数量:
?: 可有可无,但最多1个
*: 可有可无,数量不限
+: 至少1个,多了不限
5. 选择和分组:
选择: 在两个规则中二选一匹配
规则1|规则2
分组: 将多个字符集临时组合成一组子规则
(多个字符集组成的临时子规则)
比如: 身份证号: 15位数字 \d{15}
2位数字 \d\d
1位 数字或X或x [0-9Xx]
后三位可有可无,最多一次!
\d{15}(\d\d[0-9Xx])?
手机号: +86或0086 可有可无,最多一次
空字符 可有可无,多了不限
1
在3,4,5,7,8中选一个
9位数字
(+86|0086)?\s*1[34578]\d{9}
6. 指定匹配位置:
开头和结尾: ^表示字符串的开头位置
$表示字符串的结尾位置
特殊:默认正则表达式值匹配字符串的一部分即可
如果希望完整匹配: 前加^,后加$
单词边界: \b 开头,结尾,空格
密码强度: 8位字母,数字的组合
至少一位大写字母和一位数字
1. 预判整个字符串,从头到尾不只由字母组成
结论: 可能有数字,或特殊符号
(?![a-zA-Z]+$)
2. 预判整个字符串,从头到尾不只由小写字母和数字组成
结论: 可能有大写字母,或特殊符号
(?![a-z0-9]+$)
如果前两个条件都满足,说明:
可能有数字,大写字母,或特殊符号
3. 只能是8位字母或数字的组合:
[a-zA-Z0-9]{8} —— 排除了特殊符号
^(?![a-zA-Z]+$)(?![a-z0-9]+$)[a-zA-Z0-9]{8}$
2.****String中支持正则的API:
查找 替换(删除 格式化) 切割
1. 查找:4种
1.查找一个*固定*的关键词,不支持正则
var i=str.indexOf("关键词",fromi);
仅返回下*一个*,关键词的位置!
2.仅判断有没有: var i=str.search(reg);
仅返回下*一个*,关键词的位置!
找不到,返回-1
优: 支持正则;
缺: 不支持设置开始位置,只能查第一个
*不支持g*,但是支持i
3.查找所有关键词的内容:var arr=str.match(reg)
强调: 1. 返回值: 所有匹配的关键词,组成的数组
数组的length属性,记录了关键词的个数
如果没找到:***返回null***!
解决: 先判断不是null,再使用
2. reg: /正则表达式/后缀
其中后缀: i 表示忽略大小写
g 表示全部
如果不加g,match也只能找第一个
优: 支持正则,支持g后缀,查找全部
缺: 只能返回关键词内容,无法返回每个关键词位置
4. 即查找内容,又查找位置: 正则表达式对象的exec方法