有了这个库,写正则表达式就像说话一样简单
正则表达式的确是一个强大的工具,但是它那天书一般晦涩难懂的语法,让大部分初学者望而生畏。
【有了这个库,写正则表达式就像说话一样简单】第一次接触时,你是不是跟小朋友一样有很多问号?
文章图片
即便是有经验的程序员,回头看自己几个月前写的正则表达式,也有可能怀疑人生:这什么玩意儿?
文章图片
迷之代码 除了语法难懂以外,还有一个痛点,就是直接写出来的正则表达式是静态的,想要定义动态的规则也不太方便。
天下苦正则久矣,谁能振臂一呼,解救万千码农?别方,困扰程序员多年的正则恐惧症,可能有救了!
主角就是今天要介绍的一个 JavaScript 库:SuperExpressive。正如它的名字,它是通过表达性的自然语言来描述正则表达式。这个库没有其他额外的依赖,体积轻量,gzip 压缩后不到 3 Kb!
文章图片
Super Expressive SuperExpressive 通过可编程的方式,利用人类可读的语言构建正则表达式。它的 API 采用链式调用的设计,并且是不可变的(immutable)。它有以下几个特点:
- 属性和方法描述了要做的事情
- 调用顺序很重要,比如量词要写在目标对象之前:
SuperExpressive().exactly(5).digit
- 出错了也很容易发现,如果表达式无效,它会提示你如何修正
npm i super-expressive
const SuperExpressive = require('super-expressive');
示例 下面是一个官方的例子,演示如何匹配十六进制形式的字符串,比如
0xC0D3
。const SuperExpressive = require('super-expressive');
const myRegex = SuperExpressive()
.startOfInput
.optional.string('0x')
.capture
.exactly(4).anyOf
.range('A', 'F')
.range('a', 'f')
.range('0', '9')
.end()
.end()
.endOfInput
.toRegex();
// 生成的正则表达式如下:
/^(?:0x)?([A-Fa-f0-9]{4})$/
怎么样?从上往下看,是不是跟人类自然语言类似(只不过是英语),用属性和方法描述了具体规则和行为。详细的 API 可以参考它的 Github 仓库
)。正则里各种特性,比如多行、全局匹配、元字符等,基本都有对应的属性和方法。
当然,要想无障碍地使用这个库,还是需要对正则的基本概念有所了解。它的作用,只不过是把抽象的正则语法用更具表达性的自然语言来代替,方便开发者阅读和维护。
如果觉得有用,赶快分享给你的小伙伴们吧!
顺手点“在看”,每天早下班;转发加关注,共奔小康路~
推荐阅读
- Docker应用:容器间通信与Mariadb数据库主从复制
- 太平之莲
- 猎杀IP
- 开花店的前景怎么样()
- thinkphp|thinkphp 3.2 如何调用第三方类库
- 我正在参加安特思库共读一本书干法。
- Python爬虫|Python爬虫 --- 1.4 正则表达式(re库)
- 滚这个字
- 一个懂得和他自己灵魂沟通的人,这个人一定是正直善良的人
- 残卷