【问题标题】:RegEx for removing whitespace in a string用于删除字符串中的空格的正则表达式
【发布时间】:2019-05-29 00:02:37
【问题描述】:

尝试制作一个仅删除标签之间空白的非常简单的 HTML 缩小器?

我认为最好的方法是使用 JavaScript 正则表达式?但永远无法弄清楚如何正确地做到这一点。

<p>leave white spaces</p> <p>leave white spaces</p>

缩小后:

 <p>leave white space</p><p>leave white space</p>

试图定位&gt;之间的空间&lt;

【问题讨论】:

    标签: javascript regex dom regex-lookarounds regex-group


    【解决方案1】:

    您可以考虑改用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);

    【讨论】:

      【解决方案2】:

      如果我们希望或必须使用正则表达式,我们可以在打开和关闭标签之间添加一个非捕获组(?:\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 中修改/更改。

      正则表达式电路

      jex.im 可视化正则表达式:

      【讨论】:

        猜你喜欢
        • 2018-11-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多