使用 RegEx 稍微提高你的生产力 不要在生产环境中使用它 工具 有用的 RegEx 摘要

2025-06-10

使用 RegEx 稍微提高你的工作效率

不要在生产中使用它

工具

有用的正则表达式

概括

我喜欢RegEx,我每天都使用它,我将向您展示如何使用它轻松完成一些较小和较大的任务。

但...

不要在生产中使用它

好的,首先要做的事情是:如果您不完全确定是否确实有必要,那么在生产代码中使用 RegEx 时一定要非常小心。

这是一个可能发生的情况的例子。在 95% 的情况下,使用简单的循环来遍历数据,使用类似String.contains()或 之类的函数String.split(delimiter)来搜索和分解字符串,会更加安全,也更容易理解。

[编辑] 需要明确的是:我的意思就是我上面说的。不要在生产环境中使用我在这里展示的任何东西。我个人只在日志文件、测试数据和手动创建数据时使用它。

工具

我其实没有用什么特别的工具。所有或多或少比较复杂的文本编辑器或 IDE 都支持正则表达式的搜索和替换。我个人大部分工作都是用Sublime Text完成的,有时也用IntelliJ

有用的正则表达式

这是我在日常生活中最常使用 RegEx 的方式。

替换行首行尾

假设你有以下文本

Flour
Eggs
Milk
Salt
Maple sirup
Enter fullscreen mode Exit fullscreen mode

如果你想创建一个项目符号列表。你当然可以*在每行前面手动输入一个。当然,你也可以使用正则表达式。

搜索 替换为
^ *

这将导致:

* Flour
* Eggs
* Milk
* Salt
* Maple sirup
Enter fullscreen mode Exit fullscreen mode

^一个特殊字符,用于匹配行首。将其替换为一个或多个字符即可为每行添加前缀。

行尾也一样。假设你需要在每行末尾添加一个逗号。

"Foo"
"Bar"
"Baz"
Enter fullscreen mode Exit fullscreen mode
搜索 替换为
$ ,
"Foo",
"Bar",
"Baz",
Enter fullscreen mode Exit fullscreen mode

最后一个逗号可能没有必要,因此必须手动删除。虽然有一个更复杂的搜索方法可以解决这个问题,但大多数情况下并不值得。最好让正则表达式来处理繁重的工作,然后手动修复由此产生的 2%。

交换列

假设我们得到以下数据

"foo":8,
"bar":42,
"baz":13,
Enter fullscreen mode Exit fullscreen mode
搜索 替换为
"(\w+)":(\d+), "$2":"$1",
"8":"foo",
"42":"bar",
"13":"baz",
Enter fullscreen mode Exit fullscreen mode

这里发生了什么?我们正在使用组。组由括号分隔。所以我们有(group1)(group2)(group3)。组的好处在于以后可以使用它们。在 Sublime 中,$n使用 ,其中n组索引从 1 开始。注意,我们没有在组内包含,和。在每个组中,我使用匹配单个数字,匹配一个单词字符,例如 az、AZ、0-9 和,但没有使用eg匹配一个或多个此类字符。"\d\w_-+

将 CSV 转换为 JSON

假设我们有以下 CSV:

1,35,"Bob"
2,42,"Eric"
3,27,"Jimi"
Enter fullscreen mode Exit fullscreen mode
搜索 替换为
(\d+),(\d+),"(\w+)" {"id":$1,"age":$2,"name":"$3"},

结果:

{"id":1,"age":35,"name":"Bob"},
{"id":2,"age":42,"name":"Eric"},
{"id":3,"age":27,"name":"Jimi"},
Enter fullscreen mode Exit fullscreen mode

再次,我们使用组和数字或单词匹配器。

通过添加包装器对象和数组以及删除最后一个逗号,转换后的结果可以轻松转换为有效的 JSON。但最繁重的工作由正则表达式完成。

创建测试数据

有时我需要大量的测试数据。

我通常的做法是使用 Excel 创建一个数字序列。没错,就是 Excel。Excel 在处理序列方面非常智能。例如,你可以输入类似以下内容:

#
10
20

然后选择并拖动右下角的按钮来填充下面的单元格。Excel 能够判断下一个数字是 30。因此,基于此,将行复制到 Sublime 中:

10
20
30
40
Enter fullscreen mode Exit fullscreen mode

然后我采用与以前相同的策略:

搜索 替换为
(\d+) {"id":$1,"username":"user$1"},
{"id":10,"username":"user10"},
{"id":20,"username":"user20"},
{"id":30,"username":"user30"},
{"id":40,"username":"user40"},
Enter fullscreen mode Exit fullscreen mode

学习

RegEx101

您可以在RegEx101测试 RegEx 是否匹配。像 Sublime 和 IntelliJ 这样的现代编辑器会在当前窗口中动态高亮匹配项。不过,这个页面也非常适合查找错误,并通过悬停和解释部分了解实际匹配的内容和原因。

正则表达式高尔夫

然后,您可以使用RegEx Golf作为一种有趣的方式来学习 RegEx。

当然,在 dev.to 上

概括

正如您所看到的,RegEx 有很多用例可以帮助您完成手动需要花费数小时的小型和大型任务,尤其是处理大型数据集时。

鏂囩珷鏉ユ簮锛�https://dev.to/stealthmusic/boost-your-productiveness-with-regex-a-little-2384
PREV
为何你应该参加编码道场?什么是编码道场?它是如何运作的?重要限制:无产品代码规则:为何你应该开始这样做?何时停止?
NEXT
如何使用 React、Hardhat 和 ethers.js 制作全栈 dapp(附示例)