REGEX: Como remover comentários de javascripts, usando código PHP
Estou combinando todo o meu javascriupt em um único arquivo para diminuir as solicitações de http! Estou preso a remover os comentários/* comments */
e// comments
. Meu nível está muito abaixo da minificação ou da análise. Eu sei como fazer cordas de macarrão. Qualquer coisa mais complexa que isso, você não encontrará no meu computador ou cozinha, SO:
Enquanto isso, combinando-o em um arquivo, quero remover todos os comentários.
Qual é o regex correto para isso?
<?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();
?>
Seria ótimo se ele capturasse e excluísse o seguinte:
/* XXXX */
/*
XXXX
XXXX
*/
Isso é tudo! Não é possível fazê-lo funcionar nomatter que regex eu uso, mesmo com esta ferramenta incrível, onde eu achei a combinação certa para ser:
RegExp: /\/\*(?:.(?!/)|[^\*](?=/)|(?<!\*)/)*\*\//gs
pattern: \/\*(?:.(?!/)|[^\*](?=/)|(?<!\*)/)*\*\/
flags: gs