持续创作,加速成长!这是我参与「掘金日新计划 · 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))
原子表里面的字符不解析
[]表示原子组,组里面的字符不解析,里面写小括号,就是正则要匹配小括号,但是没有中括号包裹的话,意思就变了,就括号就是分组的意思了,如果非要写,就要用\转义字符转义一下了。
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]