正则表达式Javascript - 删除两个HTML评论之间的文本

时间:2017-02-15 07:02:45

标签: javascript html regex gruntjs

我有两个这样的HTML评论:

<!--Delete-->
Blah blah
blah blah
<!--Delete-->

我想删除它(包括评论,任何字符和换行符)。顺便说一句,我使用javascript和Grunt进行替换。

由于

2 个答案:

答案 0 :(得分:1)

<强>正则表达式

使用以下JavaScript正则表达式来匹配自定义.html条评论的多个实例及其中的内容:

/\<\!\-\-Delete\-\-\>((.|[\n|\r|\r\n])*?)\<\!\-\-Delete\-\-\>[\n|\r|\r\n]?(\s+)?/g

然后在Gruntfile.js内注册自定义Function Task,如以下要点所示:

<强> Gruntfile.js

module.exports = function (grunt) {

    grunt.initConfig({
        // ... Any other Tasks
    });

    grunt.registerTask('processHtmlComments',
        'Remove content from inside the custom delete comments',
        function() {
            var srcDocPath = './src/index.html', // <-- Define src path to .html
                outputDocPath = './dist/index.html',// <-- Define dest path for .html

                doc = grunt.file.read(srcDocPath, {encoding: 'utf8'}),
                re = /\<\!\-\-Delete\-\-\>((.|[\n|\r|\r\n])*?)\<\!\-\-Delete\-\-\>[\n|\r|\r\n]?(\s+)?/g,
                contents = doc.replace(re, '');

            grunt.file.write(outputDocPath, contents, {encoding: 'utf8'});
            console.log('Created file: ' + outputDocPath);
        });

    grunt.registerTask('default', [
        'processHtmlComments'
    ]);

};

附加说明

当前通过CLI运行$ grunt执行以下操作:

  1. index.html文件夹中读取名为src的文件。
  2. 从开始和结束的自定义评论 <!--Delete--> 中删除任何内容,包括评论本身。
  3. 将新的index.html(不包含不需要的内容)写入dist文件夹。
  4. 根据您的项目要求,可能需要重新定义srcDocPathoutputDocPath的值。

    编辑更新了Regex以允许内联评论使用。例如:

    <p>This text remains <!--Delete-->I get deleted<!--Delete-->blah blah</p>
    

答案 1 :(得分:0)

在下面的正则表达式中, 我们用一个单词开头检查
\<\! =&gt;在escape =&gt;之后<!
然后(.)*获取任何内容 然后跳过第一个标记结束\-\>
然后anythig (.)*
然后在评论结束时\-\-\>
并检查全局匹配g;

var text="<div>hello there</div><!--Delete-->Blah blahblah blah<!--Delete--><span>Hello world</span>";
var re=/\<\!(.)*\-\>(.)*\-\-\>/g;
console.log(text.replace(re,""));

但通常HTML评论看起来像

<!--comments blah blah blah //-->

为此,这是另一个正则表达式

var text = "<span>Hi there</span><div>Hello world</div><!--comments blah blah blah //--><span>something</span>";
var re=/\<\!\-(.)*\/\/\-\-\>/g;
console.log(text.replace(re,""));