资讯专栏INFORMATION COLUMN

快速掌握正则表达式 | 02 掌握进阶的匹配操作

wayneli / 2184人阅读

摘要:元字符使正则表达式具有处理能力。所谓元字符就是指那些在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符即位于元字符前面的字符在目标对象中的出现模式。

掌握进阶的匹配操作

正则表达式真好玩,上一篇大家应该掌握了一些基础的操作,想必应该掌握的还不错,那么本篇带你掌握一些进阶操作。

介绍元字符

正则表达式语言由两种基本字符类型组成:原义(正常)文本字符和元字符。

元字符使正则表达式具有处理能力。

所谓元字符就是指那些在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符前面的字符)在目标对象中的出现模式。

以上关于元字符的介绍内容来自网络,仅供参考。

而本次要介绍的元字符是 [](和),有什么作用呢?

上一篇我们了解到可以通过英文句号 . 来匹配任意字符,但有时候我们就很明确从某些字符里面匹配就好了。比如我们就只想匹配 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"]

看例子,取反字符为 ^。本例子是将最后一个字符匹配非数字的,通过取反操作方便了许多,不用暴力考虑很多种情况了。

小结

芜湖,本小节内容到底就结束啦,感谢各位的阅读,我们期待下一篇吧。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/123721.html

相关文章

  • 正则达式

    摘要:最全正则表达式总结验证号手机号中文邮编身份证地址等是正则表达式的缩写,作用是对字符串执行模式匹配。学习目标了解正则表达式语法在中使用正则表达式在中使 JS高级技巧 本篇是看的《JS高级程序设计》第23章《高级技巧》做的读书分享。本篇按照书里的思路根据自己的理解和经验,进行扩展延伸,同时指出书里的一些问题。将会讨论安全的类型检测、惰性载入函数、冻结对象、定时器等话题。1. 安全的类型检测...

    yibinnn 评论0 收藏0
  • 一名【合格】前端工程师自检清单

    摘要:在他的重学前端课程中提到到现在为止,前端工程师已经成为研发体系中的重要岗位之一。大部分前端工程师的知识,其实都是来自于实践和工作中零散的学习。一基础前端工程师吃饭的家伙,深度广度一样都不能差。 开篇 前端开发是一个非常特殊的行业,它的历史实际上不是很长,但是知识之繁杂,技术迭代速度之快是其他技术所不能比拟的。 winter在他的《重学前端》课程中提到: 到现在为止,前端工程师已经成为研...

    罗志环 评论0 收藏0
  • 一名【合格】前端工程师自检清单

    摘要:在他的重学前端课程中提到到现在为止,前端工程师已经成为研发体系中的重要岗位之一。大部分前端工程师的知识,其实都是来自于实践和工作中零散的学习。一基础前端工程师吃饭的家伙,深度广度一样都不能差。开篇 前端开发是一个非常特殊的行业,它的历史实际上不是很长,但是知识之繁杂,技术迭代速度之快是其他技术所不能比拟的。 winter在他的《重学前端》课程中提到: 到现在为止,前端工程师已经成为研发体系...

    isaced 评论0 收藏0
  • 正则达式

    摘要:本文内容共正则表达式火拼系列正则表达式回溯法原理学习正则表达式,是需要懂点儿匹配原理的。正则表达式迷你书问世了让帮你生成和解析参数字符串最全正则表达式总结验证号手机号中文邮编身份证地址等是正则表达式的缩写,作用是对字符串执行模式匹配。 JS 的正则表达式 正则表达式 一种几乎可以在所有的程序设计语言里和所有的计算机平台上使用的文字处理工具。它可以用来查找特定的信息(搜索),也可以用来查...

    bang590 评论0 收藏0
  • 12个优秀资源助你迅速掌握正则达式

    摘要:给开发人员使用的正则表达式测试仪。一个令人非常兴奋的项目,可以改变开发人员使用正则表达式的方式。它的目的是使正则表达式易于阅读和使用命令编写。实时的正则表达式测试工具,支持,,和。 正则表达式是每个程序开发人员的必备技能。任何开发项目,不管使用什么编程语言,都需要从给定的数据提取值并进行验证。例如对输入内容的验证,过滤 URL 变量等等,正则表达式处理这样的任务很容易,而且只需要很少的...

    zoomdong 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<