JavaScript基础(八) --- 正则

1. 什么是正则

 1. 正则只和字符串有关,换言之正则只和字符串打交道;
 2. 正则用来操作(匹配和捕获)字符串的一系列规则;
    匹配:判断你是否符合我的规则: 返回值:布尔值; test
    捕获:把符合我们规则的内容拎出来; 拿到的:字符串;

2. 正则的定义

 正则创建的两种方式:字面量 和 实例
    两种创建方式的区别:
      1)实例创建时,特殊含义的字符需要转义(\);
      2)实例创建可以进行变量的拼接,但是字面量方式创建,不能拼接变量;

 var reg=/\d/;                      // 字面量创建
 var reg=new RegExp('^'+str+'$');   // 实例创建

3. 正则由两部分组成:元字符 和 修饰符

元字符包含:代表特殊意义的元字符 和 代表次数的量词元字符
   1. 代表特殊意义的元字符:
        \  ----  转义字符
        |  ----  或
        () ----  分组
        .  ----  除了\n以外的其他字符
        \n ----  换行(一般用在控制台的换行)
        \b ----  开头结尾和空格
        ^
        $

        \d 数字     \w 数字字母下划线      \s 空格
        \D 非数字   \W 非数字字母下划线     \S 非空格

        [abc] abc三个中的任何一个      [^abc] 除了abc这三个的任何一个
        [a-z] 字母中的任何一个         [^a-z] 非字母
   2. 代表次数的量词元字符:
        *       0到多
        +       1到多
        ?      0次或1次;
        {n}     正好几次
        {n,}    至少n次
        {n,m}   n次到m次
修饰符:
        g       全局 global
        i       忽略大小写
        m       换行操作

4. 常用的正则判断

 1. 有效电话号码
    var reg = /^1/d{10}$/;
 2. 身份证号码
    var reg = /^(\d{17})(\d|X)$/;      // 最后一位有可能是X
    var reg = /^(\d{2})(\d{4})(\d{4})(\d{2})(\d{2})(\d{2})(\d)(\d|X)$/ 
 3. 23或者24
    var reg = /^(23|24)$/              // 用到或的时候一定要加()
 4. 年龄在18~67岁之间
    var reg = /^(18|19)|([2-5]\d)|(6[0-7])$/;
 5. 去除数位空格
    var reg = /(^ +)|( +$)/;
 6. 非空验证
    var reg = /^\s+$/;
 7. 邮箱验证
    var reg = /^([\w.-]+)@([0-9a-zA-Z]+)(\.[a-zA-Z]{2,4}){1,2}$/
 8. 中文名字
    var reg = /^[\u4e00-\u9fa5]{1,4}$/      // 基本汉字的Unicode码范围:    4E00-9FA5
 9. 偷小说:
    var reg=/<[^<>]+>/g;

5. 工作中遇到的正则

1. 密码匹配: 要求8~30位,同时包含:大写字母、小写字母、数组的字符串
/^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])[a-zA-Z0-9]*$/

2. 8 - 30 个字符,必须同时包含三项(大写字母、小写字母、数字、 ()`~!@#$%^&amp;*-+=|{}[]:;'&lt;&gt;,.?/ 中的特殊符号)。
/(?=^.{8,30}$)(?!^[\d\W_]*$)(?!^[\da-z]*$)(?!^[\dA-Z]*$)(?!^[\W_a-z]*$)(?!^[\W_A-Z]*$)(?!^[a-zA-Z]*$).*$/

6. 正则捕获的特点:

 1. 懒惰性:解决办法-用全局g;
    eg:每次都是从索引0开始查找;
    用了全局g,lastIndex每次查找都是从找到内容的下一个元素的索引开始查找;

 2. 贪婪性:解决办法-用?
7. 懒惰性

每一次执行exec只捕获第一个匹配的内容,在不进行任何处理的情况下,在执行多次捕获,捕获的还是第一个匹配的内容。
例子:

var  reg = /\d+/;
var str = 'qweasd2016qazwsx2017';

var res = reg.exec(str);
console.log(res) // ['2016',index:6,input:'qweasd2016qazwsx2017']
//第二次通过exec捕获的内容还是第一个"2016"
var res = reg.exec(str);
console.log(res) // ['2016',index:5,input:'qweasd2016qazwsx2017']

解决的方法: — g

var reg = /\d/g;
var str = 'woshi2016ni2017';
console.log(reg.lastIndex)     // 0
console.log(reg.exec(str))     // ["2", index: 5, input: "qweasd2016qazwsx2017"]
8. 贪婪性

贪婪性 正则的每一次捕获都是按照匹配最长的结果捕获的,例如:2符合正则、2015也符合正则,我们默认捕获的是2015
例子:

var reg = /\d+/g;
var str = 'as2015xs2016er2017';
console.log(reg.exec(str));   //["2015", index: 2, input: "as2015xs2016er2017"]

解决办法: —– ?

var reg = /\d+?/g;
var str = 'as2015xs2016er2017';
console.log(reg.exec(str));  // ["2", index: 2, input: "as2015xs2016er2017"] 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值