

















4 oaklandOP /^(\+|-)?\d+(\.\d+)?(E(\+|-)?\d+)?$/i 我先来一个,这个表示所有 JavaScript 中的所有数字格式,可以带正负号,可以是整数,可以是浮点数,可以是带 E|e 的科学计数法格式。比如 |
8 igeeky 2024 年 3 月 29 日# 下面的正则是把用户输入的(无意义)大于 2 个字的重复的内容变成单个. 没想到有什么好的,简单的算法实现. 使用正则就比较简单.(python 代码) # 输出: ## input 测试测试测试 ## output: 测试 |
15 clue 2024 年 3 月 29 日我觉得吧, 一定要把一个复杂的校验用一个正则写出来, 是有强迫症, 也不符合代码高可阅读性的准则 把各个规则拆开校验, 性能又不会有很大的差距, 看起来还简单易懂, 后面的人改起来也方便 |
34 dallaslu 2024 年 3 月 29 日```regexp 匹配麻将和牌的正则表达式: https://dallas.lu/mahjong-regex/ |
37 aldehyde 2024 年 3 月 29 日@dallaslu 日麻有一套比较直观的麻将牌以字符串形式的表达方式。详见 https://tenhou.net/2/ |
47 oaklandOP 我说一下我对于正则表达式的理解,以及 #4 楼的正则表达式是如何写出来的。 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 我发表这个帖子的目标就是想让懂正则的人能够把自己的正则炫出来,并能解释清楚,希望不懂正则的人能够理解这种写法。因为我自己学正则的时候就很害怕,我会很希望能看见这样的帖子。 |
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。