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.有时候写小组不是为了捕获信息,只是为了改变优先级或者进行分组引用,此时咱们能够在分组前面加上'?:',表明只去匹配,可是不把这个分组内容捕获。
复制代码
相关文章
相关标签/搜索