快速掌握正则表达式 | 02 掌握进阶的匹配操作
Posted 一百个Chocolate
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了快速掌握正则表达式 | 02 掌握进阶的匹配操作相关的知识,希望对你有一定的参考价值。
掌握进阶的匹配操作
正则表达式真好玩,上一篇大家应该掌握了一些基础的操作,想必应该掌握的还不错,那么本篇带你掌握一些进阶操作。
介绍元字符
正则表达式语言由两种基本字符类型组成:原义(正常)文本字符和元字符。
元字符使正则表达式具有处理能力。
所谓元字符就是指那些在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符前面的字符)在目标对象中的出现模式。
以上关于元字符的介绍内容来自网络,仅供参考。
而本次要介绍的元字符是 []
(和),有什么作用呢?
上一篇我们了解到可以通过英文句号 .
来匹配任意字符,但有时候我们就很明确从某些字符里面匹配就好了。比如我们就只想匹配 C 和 H 两个字符。
在正则表达式里面,我们可以通过元字符 []
来定义一个字符集合。这样就能够匹配集合里面的成员了。
直接看例子吧:
let str = 'Chocolate wants 100,000 fans, Chocolate love chocolate';
let reg = /[Cc]hocolate/g;
let res = str.match(reg);
console.log(res); // ['Chocolate', 'Chocolate', 'chocolate']
从结果我们可以发现,匹配到了 chocolate,首字母大小写均可。
接下来开始我们的例子可能会变成数组了,如下:
let arr = ['Choco','choco', 'nhoco', 'yhoco', 'hearling'];
let reg = /[Ccyn]hoco/g;
let res = arr.filter(item=>item.match(reg));
console.log(res); // ['Choco', 'choco', 'nhoco', 'yhoco']
以上例子也是比较清楚了,想必对于元字符和的概念应该掌握不错了。
掌握这个知识之后,你就可以匹配已知的多个字符中的某一个了,并且也可以缩小全局匹配字母大小写问题的范围。
匹配数字
在之前的内容,我们好像一直都是匹配字符串中的字母,没有匹配过数字问题,那么现在就来利用元字符来解决匹配数字的一系列问题。
直接来看例子吧:
let arr = ['choco1','choco2', 'nhoco3', 'yhoco6', 'hearling'];
let reg = /[Ccyn]hoco[0123456789]/g;
let res = arr.filter(item=>item.match(reg));
console.log(res); // ['choco1', 'choco2', 'nhoco3', 'yhoco6']
我们通过 []
定义了数字类的集合,比较好理解,就不多解释了。
但这样写法会不会觉得有点麻烦呢?可以省略点写嘛。
当然可以,直接给出如下例子:
let arr = ['choco1','choco2', 'nhoco3', 'yhoco6', 'hearling'];
let reg = /[Ccyn]hoco[0-9]/g;
let res = arr.filter(item=>item.match(reg));
console.log(res); // ['choco1', 'choco2', 'nhoco3', 'yhoco6']
集合区间
我们可以在集合中通过 0-9
来进行数字集合的省略,这个做法就叫做利用字符集合区间。
当然,有数字集合也会有字母集合,如下:
A-Z,a-z 等等其它集合区间,但是得注意如果你想包括字母大小写的话,像 A-z 这样是不行的,可以查看 ASCII 字符表,Z 到 a 这个不是连续的,还会有其它字符,所以一般这样是不行的。
有这些组合了,想必大家也能写出很多一些进阶的匹配了,在这里我就不举例子了,大家掌握这个知识即可。
区间之外
送你离开,千里之外…
上一小节我们掌握了区间的使用,但这是我们知道的区间,对于区间之外的呢?
或者说有时候我们知道我们自己除开字母了其它的都想匹配,或者除开数字了其它都想匹配,这又该如何做呢?
如果你是暴力大法的忠实粉丝,你可能会枚举全部的情况,但有时候能考虑完全嘛?显然不可以。
其实很简单,取个反不就好了吗?直接看如下例子:
let arr = ['choco1','chocol', 'nhoco3', 'yhoco6', 'hearling'];
let reg = /[Ccyn]hoco[^0-9]/g;
let res = arr.filter(item=>item.match(reg));
console.log(res); // ['chocol']
看例子,取反字符为 ^
。本例子是将最后一个字符匹配非数字的,通过取反操作方便了许多,不用暴力考虑很多种情况了。
小结
芜湖,本小节内容到底就结束啦,感谢各位的阅读,我们期待下一篇吧。
以上是关于快速掌握正则表达式 | 02 掌握进阶的匹配操作的主要内容,如果未能解决你的问题,请参考以下文章