前言
上节我们介绍了正则的模糊匹配方式,横向用量词实现,纵向用字符组实现,本节我们就来学习下量词与字符组。
量词
量词用来表述字符出现的次数,除了{m,n}的用法,量词还有以下形式以及一些简写形式:
- {m,}:至少出现m次。
- {m}:出现m次,只有出现了规定的次数才能被匹配。
const str = 'aa a'
const reg = /a{2}/
console.log(str.match(reg)) // ['aa']
- ?:表示没有或者只出现一次,也就是{0,1}的简写形式,直接当成中文意思记忆即可。
const reg = /a?/g;
console.log(str.match(reg)); //['a', 'a', '', 'a', '']
- +:至少出现一次,{1,}的简写形式。+表示追加
const reg = /a+/g;
console.log(str.match(reg)); //['aa', 'a']
- *:出现任意次数,{0,}的简写形式,注意任意包含着0。
const str = 'aa a'
const reg = /a*/g
console.log(str.match(reg)) // ['aa', '', 'a', '']
这些简写形式尽量要牢记,后续我们会经常碰到它们,根据中文符号去记忆事半功倍。
字符组
字符组用来列举匹配的字符,字符组除了单个列举,还有范围与排除用法:
- 范围字符组:当两个字符或数字之间用-连接时,那么在此范围的字符或数字都能被匹配。
const str = 'abc123'
const reg = /[a-c1-3]/g
console.log(str.match(reg))//['a', 'b', 'c', '1', '2', '3']
当我们想要匹配-字符时怎么办呢?可以用转义字符\或者不写在中间,比如[-13]、[1-3]都可以。不是任何两个字符用-相连就生效,必须要遵从左边的unicode值比右边的高,比如a-Z范围就是无效的,因为a的值比Z高。
- 排除字符组,除了字符组当中的都可以,在首位加上^就可以,一定要首位。
const reg = /[^a-c]/g
console.log(str.match(reg))//['1', '2', '3']
总结
以上就是字符组与量词常见的用法,尤其是符号的用法与含义,在正则中同样的符号在不同位置含义是不同的,一定要记清楚符号含义。