我需要使用 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/