如何编写正则表达式来删除HTMl minifier

时间:2015-10-13 14:59:26

标签: javascript html regex node.js minify

我正在构建一个非常简单的HTML minifier。到目前为止一切都很好。

var file = process.argv[2],     html = "",     fs = require("fs");

html = fs.readFileSync(file, "utf8");
string = html.replace(/\n/g, "");
var x = string.replace(/[\t ]+\</g, "<");
var y = x.replace(/\>[\t ]+\</g, "><");
var z = y.replace(/\>[\t ]+$/g, ">");

console.log(z)

返回字符串:<div id="hello"><p class="new"> Hello</p></div>

如何编写正则表达式以消除在单词和标签之间(之前和之后)出现的任何空格?应该返回:<div id="hello"><p class="new">Hello</p></div>

3 个答案:

答案 0 :(得分:1)

这应该适合你:

var html = '<div id="hello"><p class="new">            Hello  friend  </p></div>';

var result = html.replace(/>\s+|\s+</g, function(m) {
    return m.trim();
});

https://jsfiddle.net/5gbhhh25/

它只会删除标记和单词之间的空格(打开和关闭)。因此,它不会影响文本中标记或空格中的文本。

torazaburo 对OP的要求中存在潜在的缺陷提出了一个很好的观点,其中需要单个空间来保留文本的结构。因此, Tushar str.replace(/\s+/g, ' ');解决方案在这种情况下可以完美运行。

答案 1 :(得分:0)

您可以使用trim()方法在没有正则表达式的情况下删除空白区域。

您可以在W3Schooll web site

上找到示例

见:

var str = "       Hello World!        ";
alert(str.trim()); 

答案 2 :(得分:0)

将任何非小于号的序列替换为将其中的多个空格压缩到一个空格的字符串:

str.replace(/[^<]+/g, function(match) { return match.replace(/\s+/, ' '); });

< "<div id="hello"><p class="new"> Hello</p></div>"

当然,你不想在"Hello"之前摆脱空间,因为它是有意义的。