【问题标题】:Remove JavaScript comments using Regex - PHP [duplicate]使用正则表达式删除 JavaScript 注释 - PHP [重复]
【发布时间】:2019-08-28 06:32:27
【问题描述】:

我想使用 PHP && Regex 代码缩小 HTML 代码

缩小功能:

public static function sanitize_output($buffer) {

    $search = array(
        '/ {2,}/',
        '/<!--.*?-->|\t|(?:\r?\n[ \t]*)+/s'
    );
    $replace = array(
        ' ',
        ''
    );
    $buffer = preg_replace($search, $replace, $buffer);

    return $buffer;
}

我在渲染模板(HTML 文件)时使用此功能,但在控制台上总是出现此错误

SyntaxError: missing } in complex statement note: { opens at line

缩小代码在Js代码上删除了一些“{”,有没有解决这个问题的方法?

经过一番搜索,我发现错误在JS cmets中,当我缩小HTML代码时,cmets与代码连接在一起。

我尝试使用这个正则表达式

/\/\*[\s\S]*?\*\/|([^:]|^)\/\/.*$/ 

但它不起作用

【问题讨论】:

  • 有预制的 PHP 缩小解决方案可用,为什么要自己编写一个代码?用于 HTML 的 RegEx 是一个坏主意,即使是为了缩小,使用成熟的解析器也是一个更好的主意。
  • @Connum 先生这是什么方法?
  • 通过一些搜索我发现错误是由 JS 注释引起的,是否有任何正则表达式可以删除 JS 注释?
  • 有什么解决办法吗?
  • 你不能使用 RegEx 来解析 HTML 以免你召唤不应该被命名的人stackoverflow.com/questions/1732348/…

标签: javascript php html


【解决方案1】:

就像你说的,当你使用这个函数缩小你的代码时,所有的 HTML 代码都在一行中,因为 JS cmets 之后的任何代码都可以作为注释。 所以你可以使用这个 PHP 正则表达式来删除内联 JavaScript 注释:

你的新功能:

 public static function sanitize_output($buffer) {

        $search = array(
            '#^\s*//.+$#m', //remove JS comment,
            '/ {2,}/',
            '/<!--.*?-->|\t|(?:\r?\n[ \t]*)+/s'
        );
        $replace = array(
            '',
            ' ',
            ''
        );
        $buffer = preg_replace($search, $replace, $buffer);

        return $buffer;
    }

【讨论】:

    猜你喜欢
    • 2018-03-31
    • 2020-09-30
    • 1970-01-01
    • 2011-08-04
    • 1970-01-01
    • 2011-05-23
    • 2017-07-26
    • 2011-01-28
    相关资源
    最近更新 更多