2015-10-13 26 views
2

我正在构建一个非常简单的HTML缩小器。到现在为止还挺好。如何编写正则表达式来删除标记和单词之间的空白HTMl缩小器

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>

+2

尝试'str = str.replace(/ \ s +/g,'');' – Tushar

+0

@Tushar实际上,这并不是他们需要它的方式。它将删除包括标签和属性之间的空白的所有空白空间 – Dear1ofGdBear

+0

这就是为什么您需要空间作为替换的第二个参数 – Tushar

回答

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/

它只会删除之间的空间一个标签d一个字(开头和结尾)。所以它不会影响文字之间的标签或空格中的文字。

torazaburo很好地指出了在需要单个空间来保留文本结构的情况下,OP的要求中可能存在的缺陷。所以图沙尔的解决方案str.replace(/\s+/g, ' ');将在这种情况下完美的工作。

+0

'trim'部分是多余的,因为无论如何,第一个和最后一个标签之前或之后的任何空格都将被您的正则表达式替换。 – BadHorsie

+0

这不是多余的。 – lintmouse

+0

这是很好的解决方案。 Tushar在问题评论中的解决方案是另一个很好的解决方案。 'str = str.replace(/ \ s +/g,'');' – Dear1ofGdBear

0

您可以使用trim()方法摆脱没有正则表达式的空格。

您可以在W3Schooll web site

见找到一个例子:

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

更换的非低于迹象与压缩在其内的多个空格为一个空格的字符串任意顺序:

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

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

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

相关问题