JS高级第4天
一、正则表达式概述
1、概念
正则表达式( Regular Expression )是用于匹配字符串中字符组合的模式,在数据类型中是属于对象
2、作用
正则表达式通常用来校验、查找、替换指定规则的字符文本
3、特点
- 灵活性、逻辑性和功能性 (强大)
- 简单高效
- 可读性稍差,不便于记忆(一般复制相关的正则表达式,修改后即可使用)
二、正则表达式在js中的使用
1、正则表达式的创建
1.造函数方式 RegExp,创建正则表达式
1 2
| var reg = new RegExp(/123/); console.log(reg);
|
2.字面量方式创建正则表达式 /表达式/
2、正则表达式的 test 方法
检测字符串是否符合正则表达式定义的规则,返回 true 或 false
1 2
| var reg2 = /123/; console.log(reg2.test('刺客123'));
|
三、正则表达式中的特殊字符
1、正则表达式的组成
一个正则表达式可以由简单的字符构成,比如 /123/, 也可以是简单和特殊字符的组合,比如:/^abc/
其中,特殊字符又叫元字符,是在表达式中有特殊意义的字符,如 ^, $, . 等
特殊字符非常多,可以参考:
MDN
2、边界符(位置符)
主要用来匹配字符的开始和结束位置:
(1) ^: 用来匹配以…开头
(2) $: 用来匹配以…结尾
注意:
- 不使用 ^ 和 $ 表示只要字符串中包含匹配的内容就返回 true, 可以多出其他任意字符
- ^ 和 $ 在一起配合使用,表示是精确匹配, 不能多出其他字符也不能少 (必须满足数量和类型都一致)
1 2 3 4 5 6 7 8 9 10 11 12 13
| var reg1 = /^567/; console.log(reg1.test('刺客567')); console.log(reg1.test('561237')); console.log(reg1.test('567刺客')); console.log('-------------------------------'); var reg2 = /ad$/; console.log(reg2.test('ADad')); console.log(reg2.test('adfgad')); console.log(reg2.test('afgd')); console.log('-------------------------------'); var reg3 = /^adc$/; console.log(reg3.test('adc')); console.log(reg3.test('adcadc'));
|
3、字符类
3.1、字符集合 如:[xyz]
表示匹配字符集合中的任意字符,中括号中只要有任意一个字符出现在字符串就满足规则
1 2 3 4 5 6 7 8
| var reg1 = /[xyz]123/; console.log(reg1.test('xy123')); console.log(reg1.test('ad123'));
var reg2 = /^[adc]456$/; console.log(reg2.test('a456')); console.log(reg2.test('b456')); console.log(reg2.test('adc456'));
|
3.2中括号中的特殊字符自动转义
用破折号(-)来指定一个字符范围,如:[c-f1-3A-D]
注意:
- 对于点(.)和星号(*)这样的特殊符号中括号中自动转义为原本的意义
1 2 3 4 5
| var reg3 = /^[c-f1-3A-D]$/; console.log(reg3.test('asd')); console.log(reg3.test('cdf')); console.log(reg3.test('cdf123ABCD')); console.log(reg3.test('c'));
|
3.3反向字符集合
表示匹配没有包含在字符集合中的字符,字符串中只要有一个不在中括号内的字符就满足规则
1 2 3
| var reg2 = /^[^a-f]$/; console.log(reg2.test('a')); console.log(reg2.test('z'));
|
4、量词符
用来制定某个字符出现次数的特殊符号
4.1 *
表示前面的字符出现 0 次或多次, 即可有可无(数量>=0)
1 2 3 4 5
| var reg1 = /^ab*c$/; console.log(reg1.test('abbcd')); console.log(reg1.test('abbc')); console.log(reg1.test('ac')); console.log(reg1.test('aac'));
|
4.2 +
表示前面的字符至少出现 1 次或多次, 即至少出现一次
1 2 3 4 5
| var reg2 = /^ab+c$/; console.log(reg2.test('abbcd')); console.log(reg2.test('abbc')); console.log(reg2.test('ac')); console.log(reg2.test('aac'));
|
4.3 ?
表示前面的字符出现 0 次或 1 次, 要么不出现, 要么只出现 1 次
1 2 3 4 5 6 7
| var reg3 = /^[0-9a-z]?$/; console.log(reg3.test('abbcd')); console.log(reg3.test('abbc')); console.log(reg3.test('ac')); console.log(reg3.test('aac')); console.log(reg3.test('0')); console.log(reg3.test('a'));
|
4.4 {3}
表示前面的字符只能出现 3 次
1 2 3 4 5 6 7
| var reg4 = /^[0-9a-z]{3}$/; console.log(reg4.test('abbcd')); console.log(reg4.test('abbc')); console.log(reg4.test('ac')); console.log(reg4.test('aac')); console.log(reg4.test('0')); console.log(reg4.test('a'));
|
4.5 {3,}
表示前面的字符出现 3 次 或 3次以上
1 2 3 4 5 6 7
| var reg5 = /^[0-9a-z]{3,}$/; console.log(reg5.test('abbcd')); console.log(reg5.test('abbc')); console.log(reg5.test('ac')); console.log(reg5.test('aac')); console.log(reg5.test('0')); console.log(reg5.test('a'));
|
4.6 {3,5}
表示前面的字符出现 3 次 到 5 次以内
1 2 3 4 5 6 7 8 9
| var reg6 = /^[0-9a-z]{3,5}$/; console.log(reg6.test('abbcd')); console.log(reg6.test('abbcd123')); console.log(reg6.test('abbc')); console.log(reg6.test('ac')); console.log(reg6.test('aac')); console.log(reg6.test('0')); console.log(reg6.test('a'));
|
5、 括号总结
- 中括号 [xyz] 字符集合:匹配方括号中的任意字符
- 大括号 {3,8} 量词符:表示重复的次数
- 小括号 (xyz): 表示一个整体
1 2 3
| var reg = /^*(xyz){2}$/; console.log(reg.test('xyzxyz')); console.log(reg.test('xyzxyzxyz'));
|
6、正则表达式中的预定义类
- \d:匹配 0~9 之间的任意一个数字,等价于 [0-9]
- \D: 匹配所有 0~9 之外的字符,等价于 [^0-9]
- \w: 匹配任意的字母、数字和下划线,等价于 [a-zA-Z0-9_]
- \W: 匹配任意的字母、数字和下划线之外的字符,等价于 [^0-9a-zA-Z_]
- \s: 匹配所有的空格(包括换行符,制表符,空格符等),等价于 [\t\r\n\v\f]
- \S:匹配所有的非空格符,等价于 [^\t\r\n\v\f]
- .也是正则中的一个特殊字符:(小数点)默认匹配除换行符之外的任何单个字符
记忆:所有大写字符表示 “非”, 上述预定义类只表示单个字符
四、正则替换replace
1、replace
replace(reg, 替换后的字符) 可以替换字符串中的字符,参数可以是普通字符串,也可以是正则表达式
2、正则表达式参数 /表达式/参数
指定匹配的模式:
(1)/表达式/g 全局匹配
(2)/表达式/i 忽略大小写进行匹配
1 2 3 4 5
| <input type="text" placeholder="请输入留言"> var ipt = document.querySelector('input'); ipt.addEventListener('keyup', function() { this.value = this.value.replace(/傻叉|傻\s*叉|sx/gi, '**') })
|
3、match 方法
可以配合正则表达式, 从字符串中找出所有匹配正则的字符
1 2 3
| var reg = /\d{3}/g; var res = str.match(reg); console.log(res);
|