js正则基础重识

常用的修饰符

    i: ignoreCase 忽略大小写匹配
    m: multiline 多行匹配
    g: global 全局匹配
复制代码

常用特殊元字符

    \d  是0-9之间的一个数字
    \D  非0-9之间的任意字符
    \w  '数字,字母,下划线'中任意一个 >>[0-9a-zA-Z_]等价于\w
    \W  匹配除了'数字,字母,下划线'中任意一个
    \s  匹配任意一个空白字符(包括\t制表符[TAb键四个空格] 换行符\n)
    \S  匹配除了空白字符 (空格 制表符\t 换行符)
    \b  匹配边界符 'bai' (b左边和i右边就是边界) 'bai-du'(b左边,u右边,i右边,d左边)
    \B  匹配除了边界符
    \n  匹配一个换行符
    \   转义字符(把一个普通字符转译为特殊字符,例如:\d,把一个特殊含义的转换为普通意思,例如:\. 此外的.就不是任意字符,而是一个小数点。)
    .   不仅仅是小数点,代表除了\n以外的任意字符。
    ^   以某个元字符开头
    $   以某个元字符结尾
    x|y  x或y中的任意一个
    [xyz]  x或y或z中的任意一个
    [^xyz]  除了x\y\z以外的任意字符 
    [a-z]   获取a-z中的任意字符([0-9] 等价于\d ...)
    [^a-z]   除了a-z中的任意字符
    ()   正则分组
    (?:)  当前分组只匹配不捕获
    (?=)  正向预查
    (?!)  负向预查
    量词元字符:
        ?     代表出现01次
        *     代表出现0到多次
        +     出现1到多次
复制代码
    1.中括号中出现的元字符一般都是代表本身含义的
    2.中括号中出现的两位数,不是两位数,而是两个数字中任意一个
    
    列:
    let reg = /^[18]$/; // 匹配1或者8开头或者结尾的字符串
    console.log(reg.test('18')); // false
    console.log(reg.test('1'));  // true
    console.log(reg.test('8'));  // true
    
    let reg = /^[.]+$/;  // 匹配的就是一个到多个小数点
    let reg = /^.+$/;    // 匹配除了/n以外的任意字符
    console.log(reg.test('n')); // false
    console.log(reg.test('1')); // fasle
    console.log(reg.test('...')); // true
    
    let reg = /^[12-65]$/; // 1或者2-6或者5,不是12-65
    console.log(reg.test('13')); // false
    console.log(reg.test('65')); // false
    
    let reg = /^[\d]$/;  // \d在这里依然是0-9之间的一个数字
    console.log(reg.test('0')); //  true
    console.log(reg.test('d')); //  false
复制代码

正则分组捕获

    //分组作用
    //1.改变默认的优先级
    //2.分组捕获
    //3.分组引用

    // 年龄 在18-65之间
    let reg = /^(1|[89])|([2-5]|\d)|(6[0-5])$/
    
    // 需求:编写一个匹配 [Object, aaa]
    let reg = /^\[Object, .+\]$/
    
    let reg = /^(a-z)(a-z)\2\1$/; // 正则中出现的\1 代表和第一个分组出现的一样的内容。。。
    console.log(reg.test('oppo'));
    
    // 身份证中的信息
    // '130826199102175313'
    // 130826 地域
    // 1991 02 17 出生年月日
    // 5313 倒数第二位:奇数:男 偶数:女
    let reg = /^(\d{6})(\d{4})(\d{2})(\d{2})(\d{2})(\d)(\d|X)$/;
    console.log(reg.exec('130826199102175313'))
    // 输出: [ '130826199102175313', '130826','1991','02','17','53','1','3',index: 0,input: '130826199102175313',groups: undefined ]
    // 正则捕获使用的是正则中的EXEC方法
        // 1. 如果匹配获取的结果是一个数组,如果不匹配结果是null。
        // 2. 如果我们只在匹配的时候,想要获取正则部分信息,我们可以把这部分使用小括号包起来,形成一个分组,这样在捕获的时候,不仅可以把匹配的信息捕获到而且还单独把小组匹配的信息也捕获到(分组捕获)。
        // 3.有时候写小组不是为了捕获信息,只是为了改变优先级或者进行分组引用,此时我们可以在分组前面加上'?:',代表只去匹配,但是不把这个分组内容捕获。
复制代码

转载于:https://juejin.im/post/5c85d300e51d456752161767

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值