18.正则表达式

一.正则表达式

它是用在字符串身上的!!
任何数据只要转译成字符串类型,那么都可以用正则来进行操作

  • 正则表达式,又名 “规则表达式”
  • 由我们自己来书写 “规则”,专门用来检测 字符串 是否符合 “规则” 使用的
  • 我们使用一些特殊的字符或者符号定义一个 “规则公式”,然后用我们定义好的 “规则公式” 去检测字符串是不是合格
  • 原子:是正则当中最小的单位。我们输入的任何一个字符都是一个原子,而正则就是由一个个原子组成。

二.正则表达式的创建

  • 想制定 “规则”,必须要按照人家要求的方式来制定,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');
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值