gpt4 book ai didi

php - REGEX:如何使用 PHP 代码从 javascripts 中删除注释

转载 作者:行者123 更新时间:2023-12-04 15:32:56 26 4
gpt4 key购买 nike

我正在将我所有的 javascript 合并到一个整洁的文件中,以减少 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

http://gskinner.com/RegExr/

最佳答案

使用正则表达式并不是删除 Javascript 注释的最有效方法。您需要一个字符串解析器和缩小器。参见 http://razorsharpcode.blogspot.com/2010/02/lightweight-javascript-and-css.html

如果您坚持使用正则表达式模式,请考虑如何解析这个根本不包含 Javascript 注释的简单代码:

var regex=/(ftp|https?):\/\//; alert('hello, world'); return regex;

注意 alert() 之前的双斜杠。使用正则表达式的愚蠢解析器会将有效的 Javascript 代码视为注释!

关于php - REGEX:如何使用 PHP 代码从 javascripts 中删除注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4406541/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com