Command Palette

Search for a command to run...

Regex 替换:在不触摸编辑器的情况下查找并替换为正则表达式

Regex 替换:在不触摸编辑器的情况下查找并替换为正则表达式

T
Toolz Team
|Aug 23, 2026|17 最小读数

正则表达式 合集的一部分

让我构建这个的任务很无聊,这正是它值得自动化的原因,一位客户递给我一个4000行的导出,其中每个日期都是写美式的, 01/15/2024并且它正在进入的系统想要 ISO, 2024-01-15.一个普通的查找和替换不能触摸它,因为没有固定的字符串可以搜索- 日期都不同,他们分享的是一个 形状:两位,斜杠,两位,斜杠,四位,那正是正则表达式匹配的那种东西,也正是正则表达式替换一次重写的那种东西,我把文件粘贴到一个刮刮工具里,写了一个表达式,整个导出翻转格式在不到一秒钟。

这就是免费的工作 正则表达式替换 tool 做,而这个攻略就是如何好好使用它的长版本,我将涵盖regex替换到底是什么,capture group反向引用让你重组文本而不是只删除它,每个特殊的替换令牌意味着什么,以及那些把人们绊倒的错误,它坐落在旁边 正则表达式测试仪 我单独写了 - 测试人员告诉您模式匹配什么,该工具重写它匹配什么如果正则表达式本身对您来说是新的,请从 完整的编码工具指南 然后回来。

TL;博士: Regex替换,按模式匹配文本,并使用替换字符串重写每个匹配。将要重用的部分包裹在括号中以创建编号组,然后在替换中引用它们 $1$2等等 - 图案 (\d{4})-(\d{2})-(\d{2}) 以替换 $3/$2/$1 转动 2024-01-15 进入 15/01/2024.打开 g flag 来替换每一场,替换为空来删除比赛,并使用 $<name> 对于有名的团体。 正则表达式替换 工具完全在您的浏览器中运行并实时显示替换计数。

什么是正则表达式替换?

普通的查找和替换适用于字面文本:您输入要查找的确切单词以及要放置在其位置的确切单词。当您想要更改的不是固定字符串而是模式时,它就会失败 - 一百种形式中任意一种的日期、电话号码、HTML 标签、尾随空白运行、遵循约定的变量名称。正则表达式描述该模式,正则替换将其与模板配对,该模板说明应如何重写每个匹配项。

该机构有两半。 模式 是引擎扫描文本的正则表达式,找到形状出现的每个地方。 替代品 是替换为每个匹配的字符串。在最简单的情况下,替换是纯文本,每个匹配都变成了同一个东西 - 对于将每一次选项卡和空格归一化为单个空格非常有用。强大的情况是当替换引用回匹配的部分内容时,因此输出是从输入构建的,而不是固定常数。这就是将正则替换从生硬的删除和重新输入转变为真正的重组工具的原因。

在引擎盖下, 正则表达式替换 该工具使用 JavaScript RegExp 发动机和 String.prototype.replace node。js 运送的每个浏览器和 Node。js 的方法。这很重要,因为一个实际的原因:你在工具中看到的行为与你将相同的模式和替换粘贴到自己的 JavaScript 或 TypeScript 代码中时会得到的行为相同。没有单独的味道可以学习,当你从刮刮工具移动到生产时也不会感到惊讶。工具接受的替换语法 - $1$&$<name> 其余的 - 是标准定义的确切语法,记录在案 MDN&#39;s 字符串。替换参考

捕获组后向引用如何工作?

这是正则替换中最有用的想法,值得放慢速度。当您将图案的一部分放入括号内时,您会创建一个 捕获组.引擎记住组匹配的文本,从左到右从一个开始对组进行编号,在替换字符串中, $1 意思是&quot;插入捕获的第一组中的任何内容,&quot; $2 第二个,依此类推 $99

Date的例子,使它具体化。的模式 (\d{4})-(\d{2})-(\d{2}) 4位数年份、两位数月、两位数日三组,当它相匹配时 2024-01-15,第一组持有 2024,二组持有 01,而三组持有 15。的替代品 $3/$2/$1 然后以不同的顺序和不同的分隔符从这些部件组装出一根新绳子,产生 15/01/2024。没有删除和重新输入任何内容 - 输出是从捕获的片段字面上重建的。重新排序令牌,更改它们之间的标点符号,用其他文本包裹它们,并且您已用一种表达式重新格式化文件中的每个日期。

Named groups,用可读标签是同一个想法,不是数括号,而是写 (?<year>\d{4}) 并在替换中将其称为 $<year>.二三组的图案数字可以,但是一旦你杂耍五六,名字就让图案和替换都变得容易得多,以后也容易改变,工具支持两者互换,所以你可以混合 $1$<name> 如果您喜欢,请在同一个替换中。当您第一次组装图案时,尚不确定您需要哪些组 正则表达式构建器 在将其带到此处运行替换之前,可以帮助您逐个构建它。

特殊的替换代币是什么意思?

Dollar sign 在替换字符串内是特殊的,它引入了一小组代币,超越了编号和命名的组,了解它们可以让你免于伸手去寻找比你需要的更复杂的模式。

$& inserts整个匹配的子字符串,它是你在包装或注释匹配而不是重建匹配时想要的 - 一种模式 \b\w+@\w+\.\w+\b 用替换 <$&> 在每个电子邮件地址周围放置角括号,而无需将整个内容捕获在组中。 $\`` (a backtick) inserts everything *before* the match, and $&#39;&#39;&#39;,中国人民政治协商会议委员会;中国人民政治协商会议委员会;中国人民政治协商会议委员会;中国人民政治协商会议委员会;中国人民政治协商会议委员会;中国人民政治协商会议委员会;中国人民政治协商会议委员会;中国人民政治协商会议委员会;中国人民政治协商会议委员会;中国人民政治协商会议委员会;中国人民政治协商会议委员会;中国人民政治协商会议委员会;中国人民政治协商会议委员会;中国人民政治协商会议委员会(an apostrophe) inserts everything *after* it; these are rarely needed but occasionally exactly right. And because$is special, outputting a literal dollar sign requires doubling it:$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$in the replacement produces a single产$`,这在你重新格式化货币的那一天很重要。

有一个值得投入内存的删除成语:一个空替换删除每个匹配项。随着全局标志打开且替换字段留空,该工具会从文本中删除图案的每次出现。这是剥离某些内容的最干净的方法 - 所有 HTML 标签都带有 <[^>]+>,每个尾随空间与 +$ 在多行模式下,电话号码中的所有非数字均为 \D。你不是用空格或占位符代替;你是用空格代替,匹配就消失了。

哪些标志对于更换很重要?

Regex上的标志改变其应用方式,其中两个主导了日常更换工作,其余的都是情境性的,但偶尔也具有决定性。

的全球旗帜, g,是你最会切换的,没有它,javascript&#39;s replace 仅更改 第一 match,并留下文本的其余部分 - 这是标准 String.replace 行为和惊讶的人们期待着替代者--全部。转身 g on 并且文本中的每个匹配项都重写了,该工具默认为 global on,因为替换所有内容是人们在二十次中的十九次的意思,但是切换是针对你真正想要触摸的时代而有的,只有第一次出现的忽略情况标志, i,使图案匹配而不管字母大小写,所以 error 也匹配 ErrorERROR - 当您标准化日志级别或整理不一致的资本时至关重要。

多行标志, m,改变主播 ^$ 意思是:打开它,它们匹配每个的开始和结束 线 而不是整个文本,这是您在剥离尾随空格或前缀每一行时想要的。 dotAll 标志, s,让点匹配换行符,这样一个模式就可以跨越换行符- 对于重写多行块很有用。的 u (独角兽)和 y (粘性)标志是高级案例: u 能够正确处理基本平面和某些转义形式之外的字符,并且 y anchors 每场比赛都尝试到前一场之后的确切位置,下面的对照表总结了每一场比赛何时获得自己的位置。

对替代品的影响 典型用途
全球 g 更换每场比赛,而不是只更换第一场比赛 几乎每一个替代品--全部
忽略案例 i 无论信件大小写,都匹配 正常化日志级别,整理资本
多行 m ^$ 每条线的锚 前缀行,剥离尾随空格
全部 s 该点也与换行符相匹配 重写多行块
统一码 u 正确处理星体字符和 \u{...} 表情符号,非拉丁文字
粘的 y 仅在当前位置匹配 令牌生成器,严格的顺序解析

我应该何时使用正则替换而不是简单的查找和替换?

分界线很简单:当您知道确切的文本时使用简单的查找和替换,当您知道形状但不知道确切的文本时使用 regex 替换。如果您正在更改每个 20232024者,普通的替换更快更安全,如果你不计价值每四位数年改变一次,只有一个模式可以表达。

3个任务族明显落在正则表达式一侧,第一个是 重新格式化、内容保持不变但其排列发生变化 - 日期、电话号码、写的姓名 &quot;最后、第一&quot;你想要的&quot;最后。&quot;捕获组加上重新排序的替换句柄所有这些。第二个是 批量剥离、通过替换为空来删除所有匹配模式的内容 - 标签、注释、控制字符、额外的空白。第三是 大规模条件编辑、您在其中包装、前缀或注释模式的每次出现,使用 $& match 并加进去,当你在给自己描述的变换包含了 &quot;every&quot; 这个词后跟描述而不是字面上的字符串时,你就处于正则替换的领域。

Workflow 的参数,还有一个,在你的代码编辑器里做这些编辑&#39;s find-and-replace 有效,但它就地编辑文件,这意味着错误就是在你真实的文件中运行转换,在划痕工具里先让你看到输出和替换计数,然后再把验证的结果粘贴回来,因为 the 正则表达式替换 工具完全在您的浏览器中运行,永远不会上传您粘贴的内容,即使文本是生产日志或客户导出,使用也是安全的 - 我在其中完整阐述了这一点 在线工具的数据隐私指南

regex 替换的常见错误是什么?

最常见的是忘记全球标志,想知道为什么只有第一场比赛发生了变化。如果您的替代者似乎什么也没做--一次编辑,您预计会进行数十次编辑--请检查一下 g is on。it这样常见的行程,工具默认打开,但当你关闭它以瞄准单个匹配的那一刻,记得把它转回来。

第二个是字面意思 $1 出现在您期望捕获文本的输出中。这几乎总是意味着您引用的组不存在 - 您的模式没有第一组括号,因此没有任何意义 $1 stand in for,而引擎将令牌按原样离开,修复方法是将要重用的部分包裹在括号中创建组,并从左边开始从一个。相关的陷阱是当你的模式嵌套或可选组时错误计数;当编号变得混乱时,切换到命名组,这样引用就明确了。

第三个错误是一个比你预期的更匹配的模式,通常是因为量词是贪婪的。像这样的模式 <.+> 旨在匹配一个 HTML 标签将从第一个标签开始愉快地匹配 <最后 > on the line,吞下两个标签之间的所有东西,治愈是非贪婪的量词, <.+?>的,或者更精确的字符类, <[^>]+>。这正是您验证模式的情况 正则表达式测试仪 首先,观察它突出显示的内容,然后才进行替换 - 一种习惯 regex 测试器指南 详细浏览。工具中显示的替换计数是您的另一个保障措施:如果它报告的替换数量远多于或远少于您打算更改的内容数量,则模式是错误的,而不是工具。

一个有效的例子:重新格式化名称和剥离噪音

让我首尾相连地完成一项小工作,因为看到这些部件协同工作比任何单一规则都更能解决这个想法。假设您有一份导出的联系人列表 Doe, JaneSmith, John每行一个,你希望它们为 Jane DoeJohn Smith

每行的形状是:一些单词字符、一个逗号、一个空格,然后是更多的单词字符。作为一种模式,就是 (\w+), (\w+)、第一组捕获姓氏,第二组捕获名字,交换它们并丢弃逗号的替换是 $2 $1 - 第二组,一个空格,第一组。将列表粘贴到 正则表达式替换 tool,输入那个图案和替换,全局标志开着,每一行一次翻转到&quot;first Last&quot;替换计数告诉你触碰了多少行,你可以理智地- 根据联系人的数量进行检查。

现在说相同的导出在某些您也希望消失的行上有尾随空格。这是第二个单独的替换:模式 +$ 以多行标志为准 $ matched 每行结束, 和一个空替换 所以匹配的空格被删除而不是替换 在名称交换和文件干净后运行它。two-pass方法 - 一个替换重组, 一个剥离 - 是典型的, 因为每个pass在复制出来之前向您显示其输出和计数, 您永远不会猜测转换是否做了您想做的事情。当重塑的文本需要与原始文本进行最终的视觉差异以确认没有其他移动时, 将两个版本粘贴到 文本差异 工具。对于它所适合的更广泛的日常实用程序套件, web开发人员工具包 收集我接触最多的那些。

常见问题

如何在网上找到正则表达式并替换为正则表达式? Find字段中输入你的图案,没有斜线,在Replace字段中写入替换,选择你的标志,粘贴你的文本,重写的输出瞬间出现,显示运行了多少替换,一切都在你的浏览器中发生,所以什么都没有上传。

捕获组后向引用如何在替换中发挥作用? (partheses) 在您的模式中创建编号组,您在替换为 $1, $2 等的模式中重用它们,例如,替换为 $3/$2/$1 的模式 (\d{4})-(\d{2})-(\d{2}) 将 2024-01-15 变成 15/01/2024。命名组如 (?\d{4}) 引用为 $

如何替换所有匹配项而不仅仅是第一个匹配项? 启 g(全局)标志,没有它,JavaScript 只替换第一个匹配项,正好与 String。replace 方法的行为相同,启用 g 后,文本中的每个匹配项都会被替换,这是大多数替换任务所需要的。

如何删除每场比赛而不是替换它? Replace 字段留空,全局标志开启后,每条匹配项都会从文本中删除,这是剥离标签、空白运行或共享模式的不需要字符的最干净方法。

特殊代币 $&amp;、回勾和撇号在替换中是什么意思? $&amp; 插入整个匹配的子字符串,一个回勾插入匹配前的文本,一个撇号插入其后的文本,要输出一个字面上的美元符号,请写入 $$ 这些按照标准的 JavaScript String。替换特殊的替换模式。

该工具使用什么正则表达式风味? 它使用浏览器中内置的 JavaScript (ECMAScript) RegExp 引擎,该引擎与 Node。js 中的引擎相同。此处的结果与 JavaScript 和 TypeScript 中相同模式和替换行为的方式相匹配。 JavaScript regex 在一些高级功能上与 PCRE、Python re 和 Java 不同。

为什么我的替代品会产生字面上的 1 美元而不是捕获的文本? Outport 中一个字面上的 $1 通常表示你的模式没有第一个捕获组,所以 $1 没什么可以参考的,把你要重用的部分用括号包起来创建组,从 1 开始从左到右数组。

在敏感数据上运行正则表达式替换是否安全? 是所有匹配和替换都发生在浏览器内部的 JavaScript 中,因此不会向任何服务器发送任何模式、替换或文本,也不会记录任何内容,并且该工具在您的连接被禁用的情况下可以安全地重新格式化日志文件、个人数据或专有格式。


本指南免费附带 正则表达式替换 toolz。dev 上的工具 - 无需注册、无上传、离线工作。

Comments

0 comments

0/2000 characters

No comments yet. Be the first to share your thoughts!