V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  oakland  ›  全部回复第 1 页 / 共 5 页
回复总数  86
1  2  3  4  5  
我说一下我对于正则表达式的理解,以及 #4 楼的正则表达式是如何写出来的。
正则表达式是一种线性表达式,它可以表达 concatenation / alternative / repeat 这 3 种类型,但是它不可以表达“递归”,在 Chomsky 语言级别中属于 type-3 这个级别,也就是说它的语法决定了它表达的内容是有限的。

concatenation 换句话来说就是串行,比如 /ab/ 这个正则表达式表达的就是 a 和 b 连接起来的内容。

alternative 换句话来说就是并行,也可以说是 “或” 的关系,比如 /a|b/ 表达的就是 a 或者 b 这种模式。

repeat 就是重复,比如 /a*/ 表达的就是 0 到 无穷多 次的 a 。/a+/ 表示的是 1 到 无穷多次 的 a 。/a?/ 表示的是 0 次或者 1 次 a 。

以上 3 个规则是正则表达式的核心规则,所有的其他规则都是基于以上 3 个规则的语法糖。

我最开始学习正则表达式的时候非常害怕就是因为我被太多的语法糖震慑住了。

我们来先定义一下整数,整数就是至少 0-9 至少显示 1 次,也就是 1 到 无穷多个整数。可以用 /\d+/ 来表示,这里 \d 就是 0-9 的语法糖,另外一种写法就是 [0-9],评论区有人提到了,但是没有说为什么要用第二种语法糖。我也没有理解原因。

小数就是 “整数.整数” 这样的格式,所以是 /\d+\.\d+/,注意这里 . 前面添加了 \,是因为 . 本身表示任意字符,是一个语法糖,添加 \ 来表达 “.” 的本义。

同时表达整数或者小数的话,就是 ".整数" 这个部分可以省略,也就是整体可以有 0 次或者 1 次,那么就是 /\d+(\.\d+)?/

如果是科学计数法的话,就是在刚才的基础上再添加一个 “e 整数.整数” 的格式,且后一个 “.整数” 也可以忽略,就是

/\d+(\.\d+)?(E\d+)?/i ,这里最后的 i 后缀表示忽略大小写,ignore case

我们再把 正负号作为可选项添加到这个正则里面就可以得到最终的结论了

/^(\+|-)?\d+(\.\d+)?(E(\+|-)?\d+)?$/i

我发表这个帖子的目标就是想让懂正则的人能够把自己的正则炫出来,并能解释清楚,希望不懂正则的人能够理解这种写法。因为我自己学正则的时候就很害怕,我会很希望能看见这样的帖子。
@aldehyde 感谢认真的思考和回复
lodash / ramda 算吗?
@leonshaw why ?
@malusama 看的多了就能看懂了
@icyalala 都可信,如果你能读懂的话
@igeeky
@zapper

抱歉忘记这一条规则了。不过我理解 ai 生成的内容主要针对的是自然语言和一些具有纯解答性质的文字,不是针对这类的讨论
@clue 认可!能用可读性更高的代码建议用可读性更高的代码,但是这个帖子的目的不是为了强调可读性。
有些场景只能使用正则表达式,这个帖子为了让会的人炫技,为了让不会的人找到可以求助的地方,看的多了就会了
@nagisaushio 如果要把 “1.” 和 “.1” 都囊括进来,感觉只能取其一
@danhahaha 哈哈哈,有锅也有菜。你是带着碗来的,结果没找到合适的菜?
@igeeky 哈哈哈哈哈哈,你在干嘛呢?你在干嘛呢?测试!测试!
@DavidDee 这个回答不支持开头为 “+” 的这种格式,比如 “+1”,覆盖范围不全
@Kaiv2 好酷,有空的时候欢迎给出详细的解释
@zapper 支持直接粘贴 chatgpt 的回答,也希望大家能帮 chatgpt 找 bug ,但我希望是 4 ,这个对大家作为 programmer 有帮助。
/^(\+|-)?\d+(\.\d+)?(E(\+|-)?\d+)?$/i

我先来一个,这个表示所有 JavaScript 中的所有数字格式,可以带正负号,可以是整数,可以是浮点数,可以是带 E|e 的科学计数法格式。比如
“1”
“+1”
“-1”
“-2.4879983487”
“2.34E-2”(表示 2.34 * 10^-2 ,也就是 0.0234)
“2.34e3”(表示 2340)
42 天前
回复了 smallpampan 创建的主题 随想 GAP 半年后,我对工作与躺平的看法
感谢楼主的分享,很好的思考!
所有家人身体健康
自己和伴侣有一份有意义且能支持生活的工作
能做到一些实现自我价值和社会价值事情
自己对生活依然充满希望和信心
打电话、倒计时功能随手就来,特别方便。还能通过 watch 找手机,手机经常不知道被塞在那里了,点击一下就能让手机叫出来
1  2  3  4  5  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3273 人在线   最高记录 6543   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 24ms · UTC 12:22 · PVG 20:22 · LAX 05:22 · JFK 08:22
Developed with CodeLauncher
♥ Do have faith in what you're doing.