如何编写正则表达式以删除 HTMl 缩小器的标签和单词之间的空格

How to write regex to remove whitespace between tag and words for HTMl minifier

我正在构建一个非常简单的 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)

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

我如何编写正则表达式来去除出现在单词和标签之间(前后)的任何 space?应该 return: <div id="hello"><p class="new">Hello</p></div>

您可以使用 trim() 方法在没有正则表达式的情况下摆脱空 space。

您可以在 W3Schooll web site

上找到示例

参见:

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

这应该适合你:

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/

它只会删除标签和单词(开始和结束)之间的 spaces。 所以它不会影响标签中的文本或 spaces 在文本之间。

torazaburo 很好地说明了 OP 要求中的一个潜在陷阱,即需要单个 space 来保留文本的结构。所以 Tusharstr.replace(/\s+/g, ' '); 的解决方案在那种情况下会非常有效。

将任何非小于符号序列替换为将其中多个 space 压缩为单个 space:

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

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

当然不想把"Hello"前面的space去掉,因为有意义