安全替换单引号为双引号需分两步:先用正则'(1(?:.2)*)'匹配含转义的单引号字符串,再以"$1"替换,务必启用正则模式、全字匹配,并避开JSON键、模板语法等敏感区。' ↩' ↩

直接用 "([^"]*)" 查找、'$1' 替换,是错的——那是在把双引号转单引号。你要的是反向操作,而且得避开语法敏感区,否则 JSON key 或 Python 字符串会崩。
为什么 '([^']*)' → "$1" 常常失效
最常见原因是:没开正则模式,或用了错误的捕获组引用语法。Sublime 只认 $1,写成 或 ${1} 都会原样输出,不解析。另外,^ 和 $ 默认只匹配全文首尾,不是每行——如果你搜 'foo' 却只在文件开头命中,大概率是多行模式没开。
- 右下角 .* 图标必须点亮(或按
Alt+R),否则所有d、[^']全当字面量 - 替换框里必须写
"$1",不能写"";想输出字面$得写$$ -
'([^']*)'无法处理嵌套单引号(如'He said 'Hi''),它会在第一个'就断掉 - 中文引号(‘’)或全角字符不会被匹配,需显式写
[^u2018u2019']才覆盖
安全替换单引号为双引号的推荐写法
先限定作用域:只改字符串内容,不动 JSON key、HTML 属性、注释、正则字面量。最稳的方式是分两步走——先确认哪些单引号真属于字符串,再批量换。
- 查找:
'([^'\]*(?:\.[^'\]*)*)'—— 支持转义单引号('),跳过\'这类误匹配 - 替换:
"$1"—— 注意是英文双引号 +$1,别漏引号 - 务必勾选
.*(正则)和⇧(全字匹配),避免把user_id里的'当作引号误伤 - 对 JSON 文件,建议先用
Ctrl+Shift+P→JSON: Validate确保结构合法,再操作
跨文件批量替换时容易忽略的坑
Ctrl+H 的「全部替换」只作用于当前文件;要改整个项目,必须用 Ctrl+Shift+F(Find in Files),否则白忙活。
- 打开
Ctrl+Shift+F后,先点右下角.*开正则,再填查找/替换内容 - Where 栏建议填具体路径,比如
src/**/*.js,别留空——否则可能扫到 node_modules 或构建产物 - 务必先点
Find预览结果,尤其检查是否误中了console.log("don't")里的' - 替换后不会自动保存,要手动
Ctrl+K→Ctrl+B(Save All)
真正麻烦的不是正则写不对,而是你没意识到:有些单引号根本不能动。比如 Vue 模板里 v-bind:class='{ active: isOn }',里面的单引号是 JS 对象字面量的一部分,换掉就语法报错;又比如 Python 的 f-string f'{name}',外层单引号一换,f-string 就失效。这类场景,宁可手动改,也别信“一键全换”。

















