如何编写正则表达式以删除 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 来保留文本的结构。所以 Tushar 对 str.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去掉,因为有意义
我正在构建一个非常简单的 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 来保留文本的结构。所以 Tushar 对 str.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去掉,因为有意义