使用Sublime正则表达式批量添加或删除代码结尾分号

星杰酱_4406

星杰酱_4406

2026-09-13

337人浏览

原创

sublime中匹配「行末无分号的语句」需排除空行、注释、控制结构行,推荐用正则^(\s*)(\s.*?)(?

使用sublime正则表达式批量添加或删除代码结尾分号

如何用 Sublime 的正则匹配「行末无分号的语句」

Sublime 的 Find 面板支持 PCRE 风格正则,但默认不开启多行模式,匹配行末需明确用 $ 并确保「当前搜索范围是单行」。常见误判是把空行、注释行、花括号行也当成了待处理语句。

真正需要加/删分号的,通常是形如 console.log("x") 或 return foo() 这类非空、非注释、非控制结构结尾的行。安全做法是排除干扰项:

  • 匹配目标:以字母、数字、右括号、右方括号、右花括号、反引号、加减号、感叹号、波浪号等结尾(即可能为表达式结尾),且行尾无分号
  • 排除:行尾是 {、}、:、,、;、//、/*、空白字符(含制表符)的行
  • 推荐正则(用于 Find):(? 不够安全;改用:<code>^[^\S\r\n]*[^\s;{}/\*].*(? 太重 —— 实际建议分两步走

批量添加分号:只对 JS/TS 中可安全加分号的行操作

ESLint 或 Prettier 开启 semi: true 时,加错分号反而会报错(比如 if (x) { ... } 后不能加)。所以不能无差别匹配所有行尾。

更实用的做法是聚焦「表达式语句」:以标识符、关键字(return、throw、break、continue)、调用(foo())、字面量("str"、[1,2]、{a:1})结尾,且前面没分号:

  • Find What:^([^\S\r\n]*)([a-zA-Z$_][\w$]*(?:\.[a-zA-Z$_][\w$]*)*|return|throw|break|continue|new\s+[a-zA-Z$_]|(?:\+\+|--)[a-zA-Z$_]|[0-9]+(?:\.[0-9]+)?|["'`]|[([{}]|(?:\b(?:true|false|null|undefined|this|super)\b))(?![\s;=+\-*/%&|^~?:!]|$)
  • Replace With:$1$2;
  • 务必勾选 Regular Expression 和 Match Case,取消勾选 Wrap Around
  • 先用 Find All 预览,人工确认前 5 条是否合理 —— 比如 function foo() {} 不应被匹配

批量删除分号:警惕 ASI 自动插入导致的语法错误

JS 中不是所有分号都能删。比如 return 后换行会触发 ASI,变成 return undefined;[ 和 + 相邻时缺分号会变成数组访问或加法运算。

FaceSwapper
FaceSwapper

FaceSwapper是一款支持照片、视频和 GIF 换脸的在线 AI 换脸工具。

下载

安全删除的前提是:该分号确实冗余,且其所在行不会与下一行构成意外表达式。典型可删场景只有两种:

  • 对象/数组字面量后紧跟逗号或换行(如 {a:1}, 后的分号)
  • 函数声明、if/for/while 块末尾的「多余」分号(如 if (x) {...} ;)
  • 对应正则(Find):\s*;\s*(?=\n\s*[)}\]]) 或 \}\s*;\s*(?=\n\s*(?:if|for|while|function|const|let|var))
  • 更稳妥的是用 ;\s*(?=\n\s*\}) 匹配 }; 类型 —— 但注意 class A { m() {} } 中的 } 不能删

为什么 Sublime 的 \K 在替换中不可用?替代方案是什么

Sublime Text 使用的是 Boost.Regex 引擎(旧版)或 Oniguruma(v4+),不支持 \K 丢弃已匹配内容。想实现「只替换行尾,不碰前面内容」,得靠捕获组 + 反向引用。

例如:给所有不含分号的非空行末尾加 ;,但跳过注释和空行:

  • Find What:^([^\S\r\n]*)([^;\r\n]+?)(?
  • Replace With:$1$2;
  • 解释:$1 是行首空白(保留缩进),$2 是核心内容,$2; 就是原内容加分号
  • 注意:(? 只能防行内开头的 <code>//,对 foo(); // comment 无效 —— 这类必须人工检查

正则再强,也替代不了对代码语义的理解。批量操作前,务必用 Git 暂存当前状态,且优先在小范围文件测试。最常被忽略的,是模板字符串里换行和分号共存时的边界情况 —— 比如 `line1\nline2`; 和 `line1\nline2` 是否该统一处理,Sublime 正则本身无法判断。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
js正则表达式
js正则表达式

php中文网为大家提供各种js正则表达式语法大全以及各种js正则表达式使用的方法,还有更多js正则表达式的相关文章、相关下载、相关课程,供大家免费下载体验。

2023.06.20

3796

8

正则表达式不包含
正则表达式不包含

正则表达式,又称规则表达式,,是一种文本模式,包括普通字符和特殊字符,是计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串,通常被用来检索、替换那些符合某个模式的文本。php中文网给大家带来了有关正则表达式的相关教程以及文章,希望对大家能有所帮助。

2023.07.05

2281

4

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

2023.07.05

6162

9

java正则表达式匹配字符串
java正则表达式匹配字符串

在Java中,我们可以使用正则表达式来匹配字符串。本专题为大家带来java正则表达式匹配字符串的相关内容,帮助大家解决问题。

2023.08.11

772

5

正则表达式空格
正则表达式空格

正则表达式空格可以用“\s”来表示,它是一个特殊的元字符,用于匹配任意空白字符,包括空格、制表符、换行符等。本专题为大家提供正则表达式相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.31

500

5

Python爬虫获取数据的方法
Python爬虫获取数据的方法

Python爬虫可以通过请求库发送HTTP请求、解析库解析HTML、正则表达式提取数据,或使用数据抓取框架来获取数据。更多关于Python爬虫相关知识。详情阅读本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.13

653

12

正则表达式空格如何表示
正则表达式空格如何表示

正则表达式空格可以用“\s”来表示,它是一个特殊的元字符,用于匹配任意空白字符,包括空格、制表符、换行符等。想了解更多正则表达式空格怎么表示的内容,可以访问下面的文章。

2023.11.17

366

3

正则表达式中如何匹配数字
正则表达式中如何匹配数字

正则表达式中可以通过匹配单个数字、匹配多个数字、匹配固定长度的数字、匹配整数和小数、匹配负数和匹配科学计数法表示的数字的方法匹配数字。更多关于正则表达式的相关知识详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.12.06

699

7

php正则表达式有哪些
php正则表达式有哪些

php正则表达式有"/pattern/"、"^"、"$"、"."、"[]"、"[^]"、"[a-z]"、"[A-Z]"、"[0-9]"、"\d"、"\D"、"\w"、"\W"、&a

2024.02.23

312

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程