Sublime Text 默认正则不支持跨行匹配,因 . 不匹配换行符,需显式用 \n 和 ^$ 锚点分步匹配多行注释;JSDoc 用 ^/\*\*$\n(^ *.*$\n)*^*/$,Python docstring 需按缩进分行处理。

为什么 Sublime 的正则查找不能直接跨行匹配注释?
因为 Sublime Text 默认的 .* 不匹配换行符,而 API 注释(如 JSDoc 或 Python docstring)往往跨多行。即使你写了 /\*\*[\s\S]*?\*/ 这类看似能跨行的正则,Sublime 也不支持 [\s\S] 或 . 匹配换行——它只认 \n 和 \r 显式表达。
用 ^ 和 $ 配合多行模式提取 JSDoc 块
Sublime 支持「多行模式」(即启用 . matches newline 选项,快捷键 Alt+R → 勾选 . matches newline),但更稳定的做法是用行首/行尾锚点配合换行符显式控制:
- 匹配完整 JSDoc 块(以
/**开头、*/结尾):/\*\*([^*]|\*[^/])*\*/,但这个在 Sublime 中仍可能断在换行处 - 实际可靠写法是分三步:先定位起始行
^/\*\*$,再匹配中间任意非结尾行^ \*.*$(注意空格和星号),最后匹配结尾行^\*/$ - 把这三行粘成一个正则,用
\n连接:^/\*\*$\n(^ \*.*$\n)*^\*/$,并确保启用了Regular expression和Match case(视需求) - 替换时用
$0保留原内容,或用$1提取中间描述(需加捕获组,如^/\*\*$(\n^ \*(.*)$)+\n^\*/$)
Python docstring 提取要小心缩进和引号嵌套
Sublime 对三重引号字符串的正则支持有限,无法处理引号嵌套或转义引号。直接搜 """[\s\S]*?""" 会失败;必须按行处理:
- 匹配单行 docstring:
^ {4,}""".*?"""$(假设缩进至少 4 空格) - 匹配多行 docstring 起始:
^ {4,}"""$ - 中间行要求以相同缩进 + 可选空格 + 内容:
^ {4,} .*?$ - 结尾行必须严格匹配缩进 +
""":^ {4,}"""$ - 把这三者串起来时,注意 Sublime 的
Find All(Alt+Enter)比Find更容易选中整块;否则它可能只停在第一行
导出结果时别漏掉换行符和上下文
用 Find All 选中所有匹配后,复制出来是纯文本,但 Sublime 不会自动补上原始文件中的换行风格(\r\n vs \n)。如果后续要粘贴回代码或生成文档:
- 确认当前文件换行符类型:菜单
File → Line Endings查看是Unix (LF)还是Windows (CRLF) - 替换时若用
$0\n添加分隔,要手动补对换行符,比如 Windows 下写$0\r\n - 导出前建议先
Ctrl+Shift+P→Copy as Plain Text,避免富文本格式污染 - 如果注释里有 HTML 标签或 Markdown(如
@param),Sublime 正则不解析语义,只做字面匹配——别指望它自动结构化字段
真正麻烦的是混用风格的项目:有的地方用 /**,有的用 ///,还有的用 # 行注释堆成 API 描述。这种得先统一规范,再写正则——没有万能模式,只有针对当前代码库调出来的那一条能用的表达式。

















