如何在javascript和c#中删除空行使用正则表达式

时间:2012-03-14 02:18:53

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

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

我想使用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>
谁能帮助我?

2 个答案:

答案 0 :(得分: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>

然后,您可以继续修剪线条,因为看起来它需要它。

答案 1 :(得分:0)

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

如果应该在服务器上完成,请不要使用正则表达式。为什么?请参阅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();