正则基础知识5

51 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第27天,点击查看活动详情

区间匹配

匹配数字,可以使用/d

    let shi = '2022'
    console.log(shi.match(/\d+/g))

也可以使用区间[0-9],区间可以从小到大,不能从大到小,会报错。

    let shi = '2022';
    console.log(shi.match(/[0-9]+/g))

和数字一致,字母也可以使用区间,[a-z]表示包含所有小写字母,区分大小写,如果也支持大写字符[a-z,A-Z]

    let shi = 'shizebangshiwoerzi';
    console.log(shi.match(/[a-z]+/g))

大写字符在前,小写字母在后也是可以的,它是按找ascll码的区间来书写的

    let shi = 'shizebangshiwoerzZSi';
    console.log(shi.match(/[A-z]+/g))

image.png

原子表里面的字符不解析

[]表示原子组,组里面的字符不解析,里面写小括号,就是正则要匹配小括号,但是没有中括号包裹的话,意思就变了,就括号就是分组的意思了,如果非要写,就要用\转义字符转义一下了。


    let shi = '(shizebangshiwoe/\rzZS]i).+';
    console.log(shi.match(/[()/]+/g))

认识原子组

分组是一个重要的概念,想要匹配h标签,但是不知道是h几,所以会写成h[1-6],如果下面正则是 let reg = /<(h[1-6])>[\s\S]*</h[1-6]>/gi; 那么匹配时只能匹配一个,而且是h1开头,h2结束,结果明显不符合预期,所以要用\1表示前面分组匹配的值,也就是首尾一致。

    let shi = `
    <h1>
        实则棒是狗
    </h1>
    <h2>实则棒是坏人</h2>`;
    let reg = /<(h[1-6])>[\s\S]*<\/\1>/gi;
    console.log(shi.match(reg))

原子组另一个特点,当我们不做全局匹配时,当match匹配到数据后,数组中第一个是匹配的字符串,后面紧跟着原子组中匹配的数据,有几个就跟几个,紧接着的index是从第哪个索引开始匹配上的,后面的是字符串原文,最后一个是组的别名。

   let shi = ` <h1>
        实则棒是狗
    </h1>
    <h2>实则棒是坏人</h2>`;
    let reg = /<(h[1-6])>([\s\S]*)(<\/\1>)/i;
    console.log(shi.match(reg))
    // ['<h1>\n        实则棒是狗\n    </h1>', 'h1', '\n        实则棒是狗\n    ', '</h1>', index: 1, input: ' <h1>\n        实则棒是狗\n    </h1>\n    <h2>实则棒是坏人</h2>', groups: undefined]