【问题标题】:how to remove empty line use regex in javascript and c#如何删除空行在javascript和c#中使用正则表达式
【发布时间】:2012-03-14 02:18:53
【问题描述】:

用户通过文本编辑器输入内容,最后提交到数据库。 在存储到数据库之前,我想在开始和结束时删除内容中的空行(中间不能删除)。

我想使用 JavaScript 和 C#

示例内容为:

<div>
    <p><span><br></span></p>
    <span>a<br/>bc</span>
    <p>te<br>st</p>
    <p>\n<span>\n</span></p>
    <p><span><br/></span></p>
</div>

我需要的是:

<div>
    <span>a<br/>bc</span>
    <p>te<br>st</p>
</div>

谁能帮帮我?

【问题讨论】:

  • &lt;p&gt; 标签是否总是&lt;span&gt; 标签之外?你甚至可以依靠用户输入标签来平衡吗?在您的“示例内容”中,\n 的行会在一个(文本)行上,还是在输入字符串中实际上有换行符?
  • @mathematical.coffee \n 和
    (或
    )由文本编辑器创建
  • 那么,你想使用 JavaScript 还是 C#?使用 C# 最简单的方法是使用 HTML 解析器并遍历生成的树以查找相邻的空节点。正则表达式在这里帮不了你。
  • 我们只需要添加这个链接:stackoverflow.com/questions/1732348/…
  • 考虑使用 DOM 树并递归遍历所有节点,删除那些仅包含空格的节点 (C# string.IsNullOrWhiteSpace(node.InnerText)),然后就完成了。浏览器中的 Javascript DOM 或 C# 中的 HTML Agility Pack 都可以让您这样做。

标签: c# javascript regex dom html-agility-pack


【解决方案1】:

好吧,如果我了解您要完成的工作,这应该可以解决您的问题:

        string input = @"
        <div>
            <p><span><br></span></p>
            <span>a<br/>bc</span>
            <p>te<br>st</p>
            <p>\n<span>\n</span></p>
            <p><span><br/></span></p>
        </div>
        ";
        string pattern = @"(<p>)?(\\n|<br/?>)?<span>(<br/?>|\\n)</span>(</p>)?";
        System.Text.RegularExpressions.Regex reg = new System.Text.RegularExpressions.Regex(pattern);
        string final = reg.Replace(input, String.Empty);
        Console.WriteLine(final);
    }

上面的代码会返回:

<div>

                <span>a<br/>bc</span>
                <p>te<br>st</p>


</div>

然后您可以修剪任何一条线,因为它看起来需要它。

【讨论】:

    【解决方案2】:

    问题中没有提到您是要在客户端还是服务器端清理内容。

    如果应该在服务器上完成,请不要使用正则表达式。为什么?请参阅this 出色的答案。请改用 HTML 解析器。例如。使用 HtmlAgiltyPack:

    var doc = new HtmlDocument();
    doc.LoadHtml(html);
    foreach(var node in doc.DocumentNode.SelectNodes("//div|//span|//p"))
        if (string.IsNullOrWhiteSpace(node.InnerText.Replace(@"\n", string.Empty)))
            node.Remove();
    
    var result = doc.DocumentNode.OuterHtml;
    

    但它可以通过使用 jQuery 在客户端上更简单地完成(也无需正则表达式):

    var dom = $(html);
    dom.find('p,span,div').each(function() {
        if ($(this).text().trim() == '')
            $(this).remove();
    });
    
    var result = dom.wrap('<div>').parent().html();
    

    【讨论】:

      猜你喜欢
      • 2015-12-17
      • 2021-04-10
      • 2019-02-16
      • 2011-11-01
      • 1970-01-01
      • 2021-12-16
      • 1970-01-01
      • 2011-12-23
      • 2016-06-17
      相关资源
      最近更新 更多