快速掌握正则表达式 | 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 掌握进阶的匹配操作的主要内容,如果未能解决你的问题,请参考以下文章

快速掌握正则表达式 | 05 单词和字符串匹配的高端操作

快速掌握正则表达式 | 05 单词和字符串匹配的高端操作

快速掌握正则表达式 | 05 单词和字符串匹配的高端操作

快速掌握正则表达式 | 01 掌握最基本的匹配

快速掌握正则表达式 | 01 掌握最基本的匹配

快速掌握正则表达式 | 03 元字符真好玩