能够用在 VS Code 中的正则表达式小技巧

翻译:疯狂的技术宅
https://medium.freecodecamp.o...

本文首发微信公众号:前端先锋
欢迎关注,天天都给你推送新鲜的前端技术文章javascript


你是否是一直都想学正则表达式,可是由于它的复杂性而被推迟了?在本文中,我将向你展现五个易于学习的正则技巧,你能够当即在本身喜欢的文本编辑器中使用它们。前端

clipboard.png

文本编辑器设置

虽然如今几乎全部的文本编辑器都支持正则表达式,但我在本教程中用的是 Visual Studio Code,不过你可使用任何你喜欢的编辑器。另请注意,你一般须要在搜索输入框附近的某处打开 RegEx 开关。如下是在 VS Code 中执行此操做的方法:java

clipboard.png

你须要经过选中此选项启用RegEx程序员

1) .  —  匹配任何字符

让咱们开始吧。点符号 . 用来匹配任何字符:面试

b.t

clipboard.png

上面的正则匹配 "bot"`"bat"和任何以b开头、t结尾的三个字符的单词。可是若是你想搜索点符号,则须要用 \ 来对它进行转义,因此下面这个正则只匹配确切的文本 "b.t"正则表达式

b\.t

clipboard.png

2) .*  —  匹配任何东西

这里 . 表示“任何字符”* 表示“此符号重复前面那个内容任何次数。” 把它们放在一块儿(.*)表示“任何符号重复任意次数。” 例如,你能够用它来查找以某些文本开头或结尾的匹配项。假设咱们有一个这样的 javascript 方法:express

loadScript(scriptName: string, pathToFile: string)

咱们想找到这个方法的全部调用,其中 pathToFile 指向文件夹“lua” 中的任何文件。可使用如下正则表达式:segmentfault

loadScript.*lua

这意味着,“匹配全部以 "loadScript" 开始同时以"lua"结束的字符串。”bash

clipboard.png

3) ?  —  非贪婪的匹配

.* 以后的 ? 符号和其余一些匹配规则意味着“尽量少的匹配”。 在上一张图中,每次匹配都会获得两次 "lua"字符串,直到第二个 "lua" 全部东西才能所有匹配完毕。若是你想匹配第一次出现的"lua",可使用如下正则:微信

loadScript.*?lua

这意味着,“匹配全部以 "loadScript"开头,后面为任意字符,直到第一次出现"lua"

clipboard.png

loadScript.*?lua:匹配以 loadScript 开头的全部内容,直到第一次出现"lua"

4) `( ) ###  — 捕获组和反向引用

好的,如今咱们能够匹配一些文字了。可是若是想要修改咱们发现的部分文本呢?这时候就要用到捕获组。

假设咱们修改了 loadScript 方法,如今须要在它原来的两个参数之间插入另一个参数。让咱们把这个新参数命名为 id,这时新的函数原型应以下所示:loadScript(scriptName,id,pathToFile)。咱们在这里不能用文本编辑器的常规替换功能,不过正则表达式可以帮助咱们。

clipboard.png

经过上图你能够看到运行如下正则表达式的结果:

loadScript\(.*?,.*?\)

这意味着:“匹配以 "loadScript(" 开头的, 后面跟任意内容,直到遇到第一个, ,而后是任意内容,直到第一个)

对你来讲,可能看惟一块儿来比较奇怪的是 \ 符号。它们用于对括号进行转义。

由于符号 () 是正则表达式用来捕获匹配文本部分的特殊字符,但咱们须要匹配实际的括号字符,因此须要对它们进行转义。

在前面的表达式中,咱们使用.*?符号定义了方法调用的两个参数。要使每一个参数做为单独的捕获组,须要在它们的先后分别添加()符号:

loadScript\((.*?),(.*?)\)

若是你运行这段正则,你将看到没有任何变化。这是由于它匹配的是相同的文本。但如今咱们能够将第一个参数称为\$1,将第二个参数称为\$2。这称为反向引用,它将帮助咱们作本身想要的事情:在两个参数中间添加另外一个参数:

搜索输入:

loadScript\((.*?),(.*?)\)

这与以前的正则相同,但分别将参数映射到倒了捕获组1和2。

替换输入:

loadScript($1,id,$2)

这意味着“用文本"loadScript("、捕获组一、"id"、捕获组2和 ) 替换每一个匹配的文本 ”。请注意,你不须要在替换输入中转义括号。

clipboard.png

5) [ ]  —  字符类

你能够在 [ ] 符号内来列出要在特定位置匹配的字符。例如,[0-9]匹配从0到9的全部数字。你还能够明确列出全部数字:[0123456789] —— 与前面的含义相同。你也可使用带字母的破折号,[a-z] 将匹配全部小写拉丁字符,[A-Z] 将匹配全部大写拉丁字符,[a-zA-Z] 将会匹配二者。

你也能够在字符类以后使用 *,就像在 . 以后同样,在这种状况下意味着:“匹配此类中任意数量的字符”

clipboard.png

后记

你应该知道有几种正则表达式的写法。我在这里讨论的是 javascript RegEx 引擎。大多数现代引擎都很类似,但也可能会存在一些差别。一般这些差别包括转义字符和反向引用标记。

你如今就能够打开文本编辑器,当即开始使用其中的一些技巧。你将看到能够比之前更快地完成许多重构任务。一旦你掌握了这些技巧,就能够开始研究更多的正则表达式了


本文首发微信公众号:前端先锋

欢迎扫描二维码关注公众号,天天都给你推送新鲜的前端技术文章

欢迎扫描二维码关注公众号,天天都给你推送新鲜的前端技术文章


欢迎继续阅读本专栏其它高赞文章:

相关文章
相关标签/搜索