一.正则表达式
它是用在字符串身上的!!
任何数据只要转译成字符串类型,那么都可以用正则来进行操作
- 正则表达式,又名 “规则表达式”
- 由我们自己来书写 “规则”,专门用来检测 字符串 是否符合 “规则” 使用的
- 我们使用一些特殊的字符或者符号定义一个 “规则公式”,然后用我们定义好的 “规则公式” 去检测字符串是不是合格
- 原子:是正则当中最小的单位。我们输入的任何一个字符都是一个原子,而正则就是由一个个原子组成。
二.正则表达式的创建
- 想制定 “规则”,必须要按照人家要求的方式来制定,RegExp表示的就是正则
- 把一些字母和符号写在
//
中间的东西,叫做正则表达式,比如/abcdefg/
- 创建正则表达式有两个方式 字面量 和 构造函数创建
2.0 正则表达式可以干什么
a) 操作字符串串是正则唯一的作用
b) 验证用户名长度
c) 验证电话号
d) 验证密码
e) QQ聊天表情
f) 新闻采集系统/小
2.1 字面量创建
// 下面就是字面量创建一个正则表达式
var reg = /abcdefg/
RegExp('正则') 调用这个函数
2.2 构造函数创建
// 下面就是构造函数创建一个正则表达式
var reg = new RegExp('abcdefg')
console.log(reg) // /abcdefg/
三.正则表达式里面的符号
3.1 元字符
.
: 匹配非换行的任意字符\
: 转译符号,把有意义的 符号 转换成没有意义的 字符,把没有意义的 字符 转换成有意义的 符号\.
: 表示一个点\n
: 表示换行\s
: 匹配空白字符(空格/制表符/…)\S
: 匹配非空白字符\d
: 匹配数字\D
: 匹配非数字\w
: 匹配所有字母(包括大写,小写,字母,数字,下划线)\W
: 匹配非数字、字母、下划线
3.2 限定符
限定符是配合元字符使用的
*
: 前一个内容重复至少 0 次,也就是可以出现 0 ~ 正无穷 次+
: 前一个内容重复至少 1 次,也就是可以出现 1 ~ 正无穷 次?
: 前一个内容重复 0 或者 1 次,也就是可以出现 0 ~ 1 次{n}
: 前一个内容重复 n 次,也就是必须出现 n代表数量 次{n,}
: 前一个内容至少出现 n 次,也就是出现 n ~ 正无穷 次{n,m}
: 前一个内容至少出现 n 次至多出现 m 次,也就是出现 n ~ m 次
3.3 边界符
- 边界符是限定字符串的开始和结束的
^
: 表示开头$
: 表示结尾
3.4 特殊符号
()
: 限定一组元素,表示(a|b|c)
里面三个选一个[]
: 字符集合,表示写在[]
里面的任意一个都行[^]
: 反字符集合,表示写在[^]
里面之外的任意一个都行-
: 范围,比如a-z
表示从字母 a 到字母 z 都可以|
: 或,正则里面的或a|b
表示字母 a 或者 b 都可以
3.5 标示符
i
: 表示忽略大小写,大小写不敏感- 这个 i 是写在正则的最后面的
/\w/i
- 就是在正则匹配的时候不去区分大小写
g
: 表示全局匹配- 这个 g 是写在正则的最后面的
/\w/g
- 就是全局匹配字母数字下划线
- m正则匹配默认都是一行,m能够让正则进行多行匹配
3.6 匹配中文:
- [\u4e00-\u9fa5]
- [\u2e80-\u9fff]
3.7 检测字符串
test
是用来检测字符串是否符合我们正则的标准- 语法:
正则.test(字符串)
- 返回值: boolean
3.8 字符串内容捕获
exec
是把字符串中符合条件的内容捕获出来- 语法:
正则.exec(字符串)
- 返回值: 把字符串中符合正则要求的第一项以及一些其他信息,以数组的形式返回
var reg = /\d{3}/ var str = 'hello123world456你好789' var res = reg.exec(str) console.log(res) /* ["123", index: 5, input: "hello123world456你好789", groups: undefined] 0: "123" groups: undefined index: 5 input: "hello123world456你好789" length: 1 __proto__: Array(0) */
3.9 贪婪模式:
- 就是尽可能匹配更多的内容,通过 +
四.字符串配合正则使用
4.1 search
search
是查找字符串中是否有满足正则条件的内容- 语法:
字符串.search(正则)
- 返回值 : 有的话返回开始索引,没有返回 -1
var reg = /\d{3}/ var str = 'hello123' var str2 = 'hello' console.log(str.search(reg)) // 5 console.log(str2.search(reg)) // -1
4.2 match
-
match
找到字符串中符合正则条件的内容返回 -
语法:
字符串.match(正则)
-
返回值 :
- 没有标示符 g 的时候,是和 exec 方法一样
- 有标示符 g 的时候,是返回一个数组,里面是匹配到的每一项
var reg = /\d{3}/ var str = 'hello123world456' var str2 = 'hello' console.log(str.match(reg)) // ["123", index: 5, input: "hello123wor456", groups: undefined] console.log(str2.match(reg)) // null
var reg = /\d{3}/g var str = 'hello123world456' var str2 = 'hello' console.log(str.match(reg)) // ["123", "456"] console.log(str2.match(reg)) // null
4.3 replace
-
replace
是将字符串中满足正则条件的字符串替换掉 -
语法:
字符串.replace(正则,要替换的字符串)
-
返回值 : 替换后的字符串
var reg = /\d{3}/ var str = 'hello123world456' var str2 = 'hello' console.log(str.replace(reg)) // hello666world456 console.log(str2.replace(reg)) // hello
var reg = /\d{3}/g var str = 'hello123world456' var str2 = 'hello' console.log(str.replace(reg)) // hello666world666 console.log(str2.replace(reg)) // hello
五.常用的正则判断
5.1验证手机号
var reg_phone=/^[1][356789][0-9]{9}$/;//验证手机号
var phone=16657111330;
console.log(reg_phone.test(phone),'verify phone');
5.2验证email
var reg_email=/^[0-9a-zA-Z]+@[a-z_]+(\.[a-z_-]+)+$/;
console.log(reg_email.test('zhaodenghui@iyunxiao_aaa.com'),'verify email');
5.3 验证汉语姓名
var reg_name=/[[\u4e00-\u9fa5]{2,4}/;
console.log(reg_name.test('赵登辉'),'verify name');
//4 验证用户名(必须字母开头,可以有数字不可出现特殊字符);
var reg_username=/^[a-zA-Z]{1}([a-zA-Z0-9]{5,20}$)/;
console.log(reg_username.test('zhaosad1Za'),'username')
5.4 验证英文和数字下划线
var reg_eng_num=/[a-zA-Z0-9_]+$/;
console.log(reg_eng_num.test('Tom_zhao'),'verify english an number');
5.5 验证固话
var reg_tel=/^[0-9]{3,4}-[0-9]{7}$/;
console.log(reg_tel.test('0371-4137590'),'verify tel');
5.6 验证身份证号
var reg_idCard=/^[0-9]{17}[0-9x]$/;
console.log(reg_idCard.test('41018119951245549x'),'verify ID-card')
5.7 验证日期格式,日期月份可以为不用加0 如 2018-5-9
var reg_date=/^[1-9]{1}[0-9]{3}-[0-9]{1,2}-[0-9]{1,2}$/;
console.log(reg_date.test('2017-09-08'),'verify date');
5.8 验证一般强度密码(长度8-16之内,包含大小字母数字下划线)
var reg_password=/[a-zA-Z0-9_\.+]{8,16}$/;
console.log(reg_password.test('123Q1a1Q2..+'),'verify password')
5.9验证高强度密码(长度8-16,必须包含大小写字母+数字+数字符号)
var res_strictPass=/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$/;
console.log(res_strictPass.test('124Qaqsad.'),'res_strictPass');