为了账号安全,请及时绑定邮箱和手机立即绑定

用人类语言写正则表达式:Human-Regex 让正则更易懂

由Ridwan Ajibola(https://github.com/rajibola)制作

厌烦了那些令人困惑的正则表达式模式?让我们来改变这种状况。
    // 之前:难以理解的密码验证正则表达式  
    const passwordRegex = /^(?=.*\d)(?=.*[!@#$%^&*])(?=.*[a-zA-Z]).{8,}$/;

    // 之后:人类可读的密码验证正则表达式  
    const humanPasswordRegex = createRegex()
      .startAnchor()       // ^
      .hasDigit()          // (?=.*\d)
      .hasSpecialChar()    // 包含特殊字符
      .hasLetter()         // (?=.*[a-zA-Z])
      .anyCharacter()      // 任意字符
      .atLeast(8)          // 至少 8 个字符
      .endAnchor()         // $
      .toRegExp();

点击全屏 点击退出

🔗 GitHub页面 | 📦 npm包

我为什么要这么做

正则表达式确实很强大,但让我们坦诚地说:像有人在键盘上乱按一通这样的模式看起来就像有人在键盘上睡着了一样。在我刚开始学 JavaScript 的时候,正则表达式是我最大的烦恼——而且我问过的每个开发者都跟我有一样的烦恼。

我就问:如果我们可以用日常英语来写正则表达式那会怎样?

Human-Regex 诞生,由 Ridwan Ajibola 开发,它是一个将正则表达式模式转换为 链式调用易于阅读的代码 的实用库。


它是怎么工作的

传统regex → 人读正则

传统正则 人类正则等效
/\d/ .数字()
/[a-zA-Z]/ .字母()
/(?=.*\d)/ .包含数字()

`^ / # 用人类语言写正则表达式:Human-Regex 让正则更易懂

由Ridwan Ajibola(https://github.com/rajibola)制作

厌烦了那些令人困惑的正则表达式模式?让我们来改变这种状况。
    // 之前:难以理解的密码验证正则表达式  
    const passwordRegex = /^(?=.*\d)(?=.*[!@#$%^&*])(?=.*[a-zA-Z]).{8,}$/;

    // 之后:人类可读的密码验证正则表达式  
    const humanPasswordRegex = createRegex()
      .startAnchor()       // ^
      .hasDigit()          // (?=.*\d)
      .hasSpecialChar()    // 包含特殊字符
      .hasLetter()         // (?=.*[a-zA-Z])
      .anyCharacter()      // 任意字符
      .atLeast(8)          // 至少 8 个字符
      .endAnchor()         // $
      .toRegExp();

点击全屏 点击退出

🔗 GitHub页面 | 📦 npm包

我为什么要这么做

正则表达式确实很强大,但让我们坦诚地说:像有人在键盘上乱按一通这样的模式看起来就像有人在键盘上睡着了一样。在我刚开始学 JavaScript 的时候,正则表达式是我最大的烦恼——而且我问过的每个开发者都跟我有一样的烦恼。

我就问:如果我们可以用日常英语来写正则表达式那会怎样?

Human-Regex 诞生,由 Ridwan Ajibola 开发,它是一个将正则表达式模式转换为 链式调用易于阅读的代码 的实用库。


它是怎么工作的

传统regex → 人读正则

| .行首锚点() / .行尾锚点()

    const emailRegex = createRegex()
      .startAnchor()
      .word().oneOrMore()        // 包含一个或多个字母、数字或下划线的字符串 (一次或多次)
      .literal('@')              // @
      .word().oneOrMore()        // 包含一个或多个字母、数字或下划线的字符串 (一次或多次)
      .literal('.')              // .
      .letter().atLeast(2)       // 至少两个字母 (至少两次)
      .endAnchor()
      .toRegExp();

    // 生成一个正则表达式来匹配电子邮件地址

不再猜测[a-zA-Z0-9_]{2,} 代表什么。代码解释得很清楚。

等等等等

主要特点

✅ 可读的语法
.hasDigit().startAnchor() 这样的函数使模式更加直观。

✅ 链式设计
就像写句子一样简单,你可以一步步构建复杂的模式。

✅ 轻量级
仅仅 1.0 kB(压缩)。

✅ 开源
MIT 许可证授权,欢迎各位贡献!

此处省略了部分内容 (chǔcǐ shěnglüè le bù duō néng fàn)

60秒内快速上手

安装库(library):→

       npm install human-regex

运行此命令来安装human-regex包

切换到全屏;退出全屏

构建你的第一个正则吧:

    const urlRegex = createRegex()
      .startAnchor() // 开始锚点
      .protocol()     // 协议 (支持http或https协议)
      .www().optional() // www().可选() ((www\.)?)
      .word().oneOrMore() // 单词().一个或多个()
      .literal('.') // 字面量('.')
      .tld()          // 顶级域名() (com|org|net)
      .toRegExp(); // 转正则表达式()

切换到全屏模式。退出全屏。

此处省略内容

为什么这事儿很重要

入职培训:新来的开发者一眼就能理解正则表达式的逻辑。

维护提示:再也不用通过正则表达式“考古”来更新旧代码了。

协作:团队节省了更多时间来理解模式。

……

加入这个活动

正则表达式并不一定很吓人。试试 Human Regex 并:
给 GitHub 仓库点个赞
🐞 提交 Bug
💡 提交代码或者文档

让我们一起让正则表达式变得人人都能用吧!

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消