REGEX:如何使用 PHP 代码从 javascript 中删除注释
我将所有 javascriupt 合并到一个整洁的文件中,以减少 http 请求!我一直在删除注释 /* comments */
和 // comments
。 我的水平远远低于缩小或解析的水平。我知道怎么做通心粉串。任何比这更复杂的东西,你在我的电脑或厨房中都找不到,所以:
问题
同时将其合并到一个文件中,我想删除所有评论。
正确的正则表达式是什么?
<?php
header('Content-type: text/javascript');
$offset = 60 * 60 * 24; // Cache for a day
header ('Cache-Control: max-age=' . $offset . ', must-revalidate');
header ('Expires: ' . gmdate ("D, d M Y H:i:s", time() + $offset) . ' GMT');
ob_start("compress");
function compress($buffer) {
# NOT SURE, not all new lines are removed??
# remove tabs, spaces, newlines, etc.
$buffer = str_replace(array("\r\n", "\r", "\t", ' ', ' '), '', $buffer);
# WORKS !!!
# remove comments / XXXXXXX
$buffer = preg_replace('(// .+)', '', $buffer);
########################################################################
# !! STUCK HERE !! OUTPUT FILE LOOKS OK BUT WEBSITE DOESNT LOAD OK IF THIS IS ON
# remove comments / * XXX (enters etc) XXXX * /
# $buffer = preg_replace('#/\*(?:.(?!/)|[^\*](?=/)|(?<!\*)/)*\*/#s', '', $buffer);
########################################################################
return $buffer;
}
include('../file1.js');
include('../file2.js');
ob_end_flush();
?>
如果它能够捕获并删除以下内容,那就太好了:
/* XXXX */
/*
XXXX
XXXX
*/
仅此而已!无论我使用什么正则表达式,即使使用这个令人难以置信的工具,也无法让它工作,我发现正确的匹配是:
RegExp: /\/\*(?:.(?!/)|[^\*](?=/)|(?<!\*)/)*\*\//gs
pattern: \/\*(?:.(?!/)|[^\*](?=/)|(?<!\*)/)*\*\/
flags: gs
I am combining all my javascriupt into one neat file in order to lower http requests! Im stuck removing the comments /* comments */
and // comments
.
My level is by far below minification or parsing stuff. I know how to make macaroni strings. Anything more complex than that, you will not find in my computer or kitchen, SO:
QUESTION
meanwhile at combining it to one file, i want to remove all comments.
What is the correct regex for this?
<?php
header('Content-type: text/javascript');
$offset = 60 * 60 * 24; // Cache for a day
header ('Cache-Control: max-age=' . $offset . ', must-revalidate');
header ('Expires: ' . gmdate ("D, d M Y H:i:s", time() + $offset) . ' GMT');
ob_start("compress");
function compress($buffer) {
# NOT SURE, not all new lines are removed??
# remove tabs, spaces, newlines, etc.
$buffer = str_replace(array("\r\n", "\r", "\t", ' ', ' '), '', $buffer);
# WORKS !!!
# remove comments / XXXXXXX
$buffer = preg_replace('(// .+)', '', $buffer);
########################################################################
# !! STUCK HERE !! OUTPUT FILE LOOKS OK BUT WEBSITE DOESNT LOAD OK IF THIS IS ON
# remove comments / * XXX (enters etc) XXXX * /
# $buffer = preg_replace('#/\*(?:.(?!/)|[^\*](?=/)|(?<!\*)/)*\*/#s', '', $buffer);
########################################################################
return $buffer;
}
include('../file1.js');
include('../file2.js');
ob_end_flush();
?>
It would be great if it would catch and delete the following:
/* XXXX */
/*
XXXX
XXXX
*/
Thats all! Cant get it to work nomatter what regex i use even with this incredible tool, where i FOUND the right match to be:
RegExp: /\/\*(?:.(?!/)|[^\*](?=/)|(?<!\*)/)*\*\//gs
pattern: \/\*(?:.(?!/)|[^\*](?=/)|(?<!\*)/)*\*\/
flags: gs
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
使用正则表达式并不是删除 Javascript 注释的最有效方法。您需要一个字符串解析器和缩小器。请参阅 http://razorsharpcode.blogspot.com/2010/02 /lightweight-javascript-and-css.html
如果您坚持使用正则表达式模式,请考虑如何解析这个根本不包含 Javascript 注释的简单代码:
注意
alert()< 之前的双斜杠/代码>。使用正则表达式的愚蠢解析器会将有效的 Javascript 代码视为注释!
Using regular expressions isn't the most efficient way of removing Javascript comments. You need a string parser and minifier. See http://razorsharpcode.blogspot.com/2010/02/lightweight-javascript-and-css.html
If you insist on regex patterns, think about how you would parse this simple code that contains no Javascript comments at all:
Notice the double slash before
alert()
. A stupid parser that uses regular expressions will treat valid Javascript code as comments!我想分享一段正则表达式(PHP)代码
我为自己写的,它也被用于
joomla 的 YIREO sriptmerge 插件标记为简单代码..
压缩 JavaScript 代码并删除其中的所有注释。
它也可以与 mootools 一起使用,速度很快
(与其他 PHP 解决方案相比)并且不会损坏
JavaScript 本身解决了许多评论删除问题。
我只是为了好玩测试了这个
(
var regex=/(ftp|https?):\/\//;alert('hello,world');
) 和这个<代码>/* foo(); // 一些注释 */ 以及:
“Python 的除法:1 // 2”
和这个
//"you dope"
示例我的压缩代码不会损坏上面的示例!
上面的评论:(
使用正则表达式的愚蠢解析器会将有效的 JavaScript 代码视为注释!)所以也许您也可以使用正则表达式编写不愚蠢的解析器???
我很粗俗,不是程序员,只是想
让插件像我想要的那样工作......
如果您找到了,请随时发表评论
该脚本与有效的 javascript 语句存在问题。以及任何一种
评论标签组合(或未组合),它不能正确解决。
因为我确实有很大的便利性,所以我现在没有任何 Javascript 语法
所以我不知道会发生什么,我只是在我能找到的例子上测试了它!
更新后无需再测试 8000.000 行现在工作正常。!
I would like to share a regex (PHP) snippet of code
I wrote for myself it is also being used in the
YIREO sriptmerge plugin for joomla marked as simple code..
To compress javascript code and remove all comments from it.
It also works with mootools It is fast
(in comparison to other PHP solutions) and does not damage the
JavaScript it self and it resolves lots of comment removal issues.
I have just for the fun of it tested this
(
var regex=/(ftp|https?):\/\//;alert('hello,world');
) and this/* foo(); // some comment */
and this:"Python's division: 1 // 2"
and this
//"you dope"
exampleand my compression code those not damage the example above!
COMMENT FROM ABOVE:(
A stupid parser that uses regular expressions will treat valid JavaScript code as comments!) So Maybe you can also write none stupid parsers with regex???
I am off coarse not a programmer just wanted to
make the plugin work like i wanted it to....
Please feel free to leave a comment if you find a
problem with this script with valid javascript sentences. And any kind of
comments tags combined (or not combined) that it does not solve correctly..
Because I do have a big handycap I do not now any Javascript syntax
so I do not know what to expect I just tested it on examples I could find!
Updated needs no more testing 8000.000 lines work fine now.!
我遇到了一个场景,我通过 xhr 通过网络加载 javascript 代码,并且需要清理代码以进行评估。我正在使用这段代码:
我使用这个进行了测试,唯一的障碍是这样的注释:
所以我必须将该代码更改为内联注释:
此代码不会更改:
请随意编辑/建议编辑使其更具可读性。
I hit a scenario where I load javascript code over the network via xhr, and need to clean the code for eval'ing. I'm using this code:
I tested using this and the only snag I had was a comment like:
So I had to change that code to the inline comment:
This code doesn't get altered:
Feel free to edit/suggest edits to make this more readable.
JS 中删除注释的模式
CSS 中删除注释的模式
我希望上面的内容可以帮助某人。
Pattern for remove comments in JS
Pattern for remove comments in CSS
I hope above should help someone..