用户通过文本编辑器输入内容,最后提交给数据库。 在数据库中存储之前,我想在开始和结束时删除内容中的空行(中间不能删除)。
我想使用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>
谁能帮助我?
答案 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();