删除 JavaScript 注释的正则表达式:兼容多行与单行

顾言
顾言
发布时间:2026-10-14 | 4人浏览过
原创

在处理 JavaScript 代码预处理或混淆时,往往需要移除所有注释以提升性能或保护源码。本文提供了一套基于正则表达式的解决方案,能够同时精准匹配并删除多行块注释和单行行注释,并附带完整可运行的函数代码。

实现原理与注意事项

JavaScript 中的注释主要分为两种类型:多行注释(以 /* ... */ 结尾)和单行注释(以 // 开头)。简单的全局替换容易遇到嵌套或跨行匹配的问题,因此需要构建包含边界锚点和非贪婪匹配的正则表达式。此外,为了保证移除注释后代码格式不被破坏,通常会将匹配的注释内容替换为对应的换行符。

完整去注释函数

以下函数接收一段 JS 代码字符串,依次执行两步替换操作,返回清洗后的代码:

function removeJsComments(code) {
    // 第一步:移除多行注释 /* ... */
    let cleaned = code.replace(/(?:^|\n|\r)\s*\/\*[\s\S]*?\*\/\s*(?:\r|\n|$)/g, '\n');
    
    // 第二步:移除单行注释 // ...
    cleaned = cleaned.replace(/(?:^|\n|\r)\s*\/\/.*(?:\r|\n|$)/g, '\n');
    
    return cleaned;
}

第1步:处理多行注释

多行注释可能包含任意字符包括换行符,必须使用能跨行匹配的符号。该步骤主要解决块级注释的剥离,具体正则表达式如下:

代码如下:
/(?:^|\n|\r)\s*\/\*[\s\S]*?\*\/\s*(?:\r|\n|$)/g
  • (?:^|\n|\r):确保从行首开始匹配,避免误伤代码中间恰好出现的 /*。
  • \s*:忽略注释起始前的空白符。
  • [\s\S]*?:[\s\S] 用于匹配包括换行符在内的任意字符,*? 表示非贪婪模式,防止跨行吃掉过多文本。
  • \s*(?:\r|\n|$):清理注释结束后的尾部空行,保持代码紧凑。

第2步:处理单行注释

在清除多行注释后,再次扫描代码以剔除所有 // 开头的行注释。该部分的正则表达式逻辑为:

代码如下:
/(?:^|\n|\r)\s*\/\/.*(?:\r|\n|$)/g
  • 同样依赖行首断言,限制注释符号的位置合法性。
  • .* 匹配该行剩余的所有字符。
  • 同样支持将整行替换为空行,维持文件行数结构。

测试与验证

使用上述函数处理混合了注释的代码片段,可以得到干净的可执行代码。建议在实际部署前备份原始源代码,以防正则表达式在极端复杂场景下(如注释中包含特殊字符或模板字符串)产生不可预料的截断。

以上就是删除javascript中注释语句的正则表达式的详细内容,更多关于JavaScript正则处理相关资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表