javascript - 用于匹配/替换 JavaScript 注释的正则表达式(多行和内联)

标签 javascript regex comments replace

我需要使用 JavaScript RegExp 对象从 JavaScript 源中删除所有 JavaScript 注释。

我需要的是 RegExp 的模式。

到目前为止,我发现了这个:

compressed = compressed.replace(/\/\*.+?\*\/|\/\/.*(?=[\n\r])/g, '');

此模式适用于:

/* I'm a comment */

或为:

/*
 * I'm a comment aswell
*/

但似乎不适用于内联:

// I'm an inline comment

我不是 RegEx 及其模式的专家,所以我需要帮助。

另外,我想要一个 RegEx 模式来删除所有那些类似 HTML 的注释。

<!-- HTML Comment //--> or <!-- HTML Comment -->

还有那些条件 HTML 注释,可以在各种 JavaScript 源代码中找到。

谢谢。

最佳答案

注意:Regex is not a lexer or a parser .如果您遇到一些奇怪的边缘情况,需要从字符串中解析出一些奇怪的嵌套注释,请使用解析器。对于其他 98% 的时间,此正则表达式应该有效。

我有非常复杂的 block 注释,其中包含嵌套的星号、斜杠等。以下站点的正则表达式非常有效:

http://upshots.org/javascript/javascript-regexp-to-remove-comments
(原文见下文)

进行了一些修改,但保留了原始正则表达式的完整性。为了允许某些双斜杠 ( // ) 序列(例如 URL),您必须使用反向引用 $1在您的替换值中,而不是空字符串。在这里:

/\/\*[\s\S]*?\*\/|([^\\:]|^)\/\/.*$/gm

// JavaScript: 
// source_string.replace(/\/\*[\s\S]*?\*\/|([^\\:]|^)\/\/.*$/gm, '$1');

// PHP:
// preg_replace("/\/\*[\s\S]*?\*\/|([^\\:]|^)\/\/.*$/m", "$1", $source_string);

演示: https://regex101.com/r/B8WkuX/1

失败的用例:在一些极端情况下,此正则表达式会失败。这些案例的持续 list 记录在 this public gist 中。 .如果您能找到其他案例,请更新要点。

...如果您想删除 <!-- html comments -->使用这个:

/\/\*[\s\S]*?\*\/|([^\\:]|^)\/\/.*|<!--[\s\S]*?-->$/

(原创-仅供历史引用)

// DO NOT USE THIS - SEE ABOVE
/(\/\*([\s\S]*?)\*\/)|(\/\/(.*)$)/gm

关于javascript - 用于匹配/替换 JavaScript 注释的正则表达式(多行和内联),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5989315/

相关文章:

javascript - 如何在单击 Angular JS 图表时获取 x 轴和 y 轴?

python - 在 Python/Pandas 中使用正则表达式运算符有条件地计算数据条目数

facebook - FB.Event.subscribe -> 'comment.create' 并非每次都会触发

javascript - 捕获按钮的值

javascript - Lodash/Javascript - 如何找到嵌套在对象中的唯一键

c# - Sql Server 中的正则表达式

javascript - 删除所有内联 JavaScript - Jquery

网站审核申请/界面

python - 我如何评论#define_line

javascript - 使用上下文在 Canvas 上抛出 HTML5 元素