如何仅删除以“//”开头的 JavaScript 注释?

Posted

技术标签:

【中文标题】如何仅删除以“//”开头的 JavaScript 注释?【英文标题】:How do I remove ONLY JavaScript comments that start with "// "? 【发布时间】:2015-12-04 10:31:26 【问题描述】:

首先要澄清的是,我已经有一个可以成功压缩其他所有内容的压缩工具,因此我不需要冗长复​​杂的preg_replace 正则表达式,只需一个简单的preg_replacestr_replace 规则即可。

我只想删除以“//”开头的 javascript cmets(包括空格,因此我不会删除 URL),直到新行。而已!再一次,我不需要替换 /* */ 或任何其他变体,因为我有一个已经这样做的脚本;唯一缺少的是这个功能,所以我想先用这个清理输入,然后将其交给脚本。

以下是我要删除的 cmets 示例的屏幕截图:

非常感谢您对此的帮助! :-) 谢谢!

【问题讨论】:

meta.***.com/q/303812/4227915 使用 php 还是 JavaScript? ***.com/questions/5989315/… 但似乎更容易使用已经编写的...希望您有一个带有 url 的字符串的测试,以确保您不会删除它。 用正则表达式来做这件事并不是一件容易的事,特别是因为// 可以在字符串中。 你可以试试regex101.com/r/cQ0dL8/1 【参考方案1】:

试试这个代码:

$re = "~\\n? */2, .*~"; 
$str = "text\n\n/*\ntext\n*\n    //example1\n    //example2\n\ntext\n\n//   example 3"; 
$subst = ""; 

$result = preg_replace($re, $subst, $str);

正则表达式匹配两个或多个/,后跟您在问题中提出的空格。当您替换它时,它将删除整行或直到空格和换行符

Demo

【讨论】:

如果您使用除 / 以外的分隔符作为您的表达式,则不必转义分隔符,例如 '~// .*$~' 将匹配斜线 斜线空格后跟任何内容到行尾。 太棒了!我尝试了这个建议,它删除了几乎所有内容,只在 html 中留下以下内容: 我不想用空白替换文本,我想删除整行。希望对您有所帮助... @Kevin,很抱歉,我忘记了网址。我现在用正确的正则表达式更新了答案。 嘿佩德罗,好的去试试,让你知道【参考方案2】:

我会使用带有多行 modifier、m 的正则表达式,

/^\h*\/\/.*$/m

这将找到以// 开头的任何行,而不管它前面的空格是什么。第一个 // 之后的所有内容都将被删除,直到该行结束。

Regex101 演示:https://regex101.com/r/tN7nW9/2

您应该在将来将您的数据作为字符串(而不是图像)包含在内,以便用户可以对其进行测试。

PHP 用法:

echo preg_replace('/^\h*\/\/.*$/m', '', $string);

PHP 演示:https://eval.in/430182

【讨论】:

嗯,你和其他人的结果略有不同。你能告诉我 THIS ~\\n 有什么区别吗? */2, .*~ 还有这个 /^\h*\/\/.*$/m 这看起来像是一个可选的新行,任意数量的空格,直到两个或更多 / 字符,然后是任何内容。这可能很危险。我的正则表达式逐行进行,需要行开始//(无论空格如何),如果是这样,则将整行替换为空。同样,如果您包含实际数据,这会容易得多,只需使用表达式运行 regex101。 这两个答案对你有用吗@Kevin? meta.stackexchange.com/questions/5234/…

以上是关于如何仅删除以“//”开头的 JavaScript 注释?的主要内容,如果未能解决你的问题,请参考以下文章

从文件中删除所有以 # 开头的行

javascript jQuery - 删除以。开头的类

javascript jQuery - 删除以。开头的类

javascript jQuery - 删除以。开头的类

如何仅从字符串的开头删除点[重复]

如何配置机器人删除发送到特定频道的消息,除非它以特定字符串开头?