用于删除字符串中空格的正则表达式
RegEx for removing whitespace in a string
试图制作一个非常简单的 HTML 缩小器,只删除标签之间的白色 space?
我认为最好的方法是使用 JavaScript 正则表达式?但永远无法弄清楚如何正确地完成它们。
<p>leave white spaces</p> <p>leave white spaces</p>
缩小后:
<p>leave white space</p><p>leave white space</p>
试图在此处 >
之间定位 space <
您可以考虑改用 DOMParser
,然后 remove
-ing 所有文本节点,这些节点在修剪后为空:
const input = `<p>leave white spaces</p> <p>leave white spaces</p>`;
const doc = new DOMParser().parseFromString(input, 'text/html');
[...doc.body.childNodes].forEach((node) => {
if (node.nodeType === 3 && node.textContent.trim() === '') {
node.remove();
}
});
console.log(doc.body.innerHTML);
如果在这里我们希望或必须使用正则表达式,我们可以在开始和结束标签之间添加一个 non-capturing 组 (?:\s+)
并使用这样的表达式将其替换为空字符串如:
<\/[a-z]+>(?:\s+)<[a-z]+>
我们可以为这个表达式添加额外的边界,但是如果我们的输入与问题中示例的输入相似,这就足够了。
例如,对于 h1
标签,我们将扩展我们的字符列表:
<\/[a-z0-9]+>(?:\s+)<[a-z0-9]+>
对于大写实例,如果有的话,我们将添加一个 i
标志。
测试
const regex = /<\/[a-z]+>(?:\s+)<[a-z]+>/gm;
const str = `<p>leave white spaces</p> <p>leave white spaces</p> <p>leave white spaces</p> <p>leave white spaces</p><p>leave white spaces</p> <p>leave white spaces</p> <p>leave white spaces</p> <p>leave white spaces</p>
<p>leave white spaces</p> <p>leave white spaces</p> <p>leave white spaces</p> <p>leave white spaces</p><p>leave white spaces</p> <p>leave white spaces</p> <p>leave white spaces</p> <p>leave white spaces</p>
<p>leave white spaces</p> <p>leave white spaces</p> <p>leave white spaces</p> <p>leave white spaces</p><p>leave white spaces</p> <p>leave white spaces</p> <p>leave white spaces</p> <p>leave white spaces</p>
`;
const subst = ``;
// The substituted value will be contained in the result variable
const result = str.replace(regex, subst);
console.log(result);
正则表达式
如果不需要这个表达式,它可以是 regex101.com 中的 modified/changed。
正则表达式电路
jex.im 可视化正则表达式:
试图制作一个非常简单的 HTML 缩小器,只删除标签之间的白色 space?
我认为最好的方法是使用 JavaScript 正则表达式?但永远无法弄清楚如何正确地完成它们。
<p>leave white spaces</p> <p>leave white spaces</p>
缩小后:
<p>leave white space</p><p>leave white space</p>
试图在此处 >
之间定位 space <
您可以考虑改用 DOMParser
,然后 remove
-ing 所有文本节点,这些节点在修剪后为空:
const input = `<p>leave white spaces</p> <p>leave white spaces</p>`;
const doc = new DOMParser().parseFromString(input, 'text/html');
[...doc.body.childNodes].forEach((node) => {
if (node.nodeType === 3 && node.textContent.trim() === '') {
node.remove();
}
});
console.log(doc.body.innerHTML);
如果在这里我们希望或必须使用正则表达式,我们可以在开始和结束标签之间添加一个 non-capturing 组 (?:\s+)
并使用这样的表达式将其替换为空字符串如:
<\/[a-z]+>(?:\s+)<[a-z]+>
我们可以为这个表达式添加额外的边界,但是如果我们的输入与问题中示例的输入相似,这就足够了。
例如,对于 h1
标签,我们将扩展我们的字符列表:
<\/[a-z0-9]+>(?:\s+)<[a-z0-9]+>
对于大写实例,如果有的话,我们将添加一个 i
标志。
测试
const regex = /<\/[a-z]+>(?:\s+)<[a-z]+>/gm;
const str = `<p>leave white spaces</p> <p>leave white spaces</p> <p>leave white spaces</p> <p>leave white spaces</p><p>leave white spaces</p> <p>leave white spaces</p> <p>leave white spaces</p> <p>leave white spaces</p>
<p>leave white spaces</p> <p>leave white spaces</p> <p>leave white spaces</p> <p>leave white spaces</p><p>leave white spaces</p> <p>leave white spaces</p> <p>leave white spaces</p> <p>leave white spaces</p>
<p>leave white spaces</p> <p>leave white spaces</p> <p>leave white spaces</p> <p>leave white spaces</p><p>leave white spaces</p> <p>leave white spaces</p> <p>leave white spaces</p> <p>leave white spaces</p>
`;
const subst = ``;
// The substituted value will be contained in the result variable
const result = str.replace(regex, subst);
console.log(result);
正则表达式
如果不需要这个表达式,它可以是 regex101.com 中的 modified/changed。
正则表达式电路
jex.im 可视化正则表达式: