使用Regex从HTML字符串中删除某些CSS属性

时间:2014-09-26 17:33:31

标签: html css regex vb.net telerik

我有一个telerik RadEditor,用户可以将HTML输入编辑器并保存到我的数据库中。大部分时间这都很有用,但是当存在position的css属性时,我遇到某些实例的问题:绝对;或z-index:100; (可以是元素的样式属性中的任何#for z-index)。

我查看了telerik选项并且没有看到开箱即用的解决方案(如果我错了就纠正我)但我基本上试图找到一个可以用来去除那些CSS属性的正则表达式代码背后。这个项目使用VB.Net(我是C#开发人员),所以我已经在进行一场艰苦的战斗了。我最初是从堆栈中查看这个example,但我并不是在尝试做同样的事情而且我不是在编写自己的正则表达式的主人......

到目前为止,这是我没有按预期工作的内容:

Dim html As String = "<div style=""position: absolute; z-index: 6;"">a bunch of other html</div>"

html = Regex.Replace(html, "((?:position|z-index)(?:[^:]+):(?:\\s*))([^;]+)", "")

我不知道我是否只有一个小的语法问题,或者我的方法完全没有...

请注意,我需要删除带或不带分号的属性,理想情况下应该忽略冒号之间的空格,所以这些都应该被删除:

  • position:absolute;
  • position:absolute;
  • 位置:绝对
  • 位置:绝对
  • z-index:anyInt;
  • z-index:anyInt;
  • z-index:anyInt
  • z-index:anyInt

唯一的另一个要求就是我要删除所有的事件,而不仅仅是第一次。任何帮助解决这个问题的人都将不胜感激!

3 个答案:

答案 0 :(得分:2)

如果我理解:

(?:position|z-index)[ ]*:[ ]*[^;]+;

删除所有属性位置和z-index

或者:

(?:position|z-index)\s*:\s*(?:absolute|\d+);?

答案 1 :(得分:1)

尝试类似this

的内容
html = Regex.Replace(html, "(position|z-index)\\s*:\\s*(\\w|\\d)+\\s*;?", "", RegexOptions.IgnoreCase | RegexOptions.Multiline);

您需要使用RegexOptions.Multiline来替换所有出现的模式。 我使用了RegexOptions.IgnoreCase,因此Regex引擎将替换与其字母大小写无关的事件。

希望它有所帮助。

答案 2 :(得分:0)

似乎你可以稍微简化,并确保你只获得像“position:absolute”或“z-index:int”这样的实例,而不是匹配position和z-index属性的其他可能值:< / p>

html = Regex.Replace(html, "((position\\s*:\\s*absolute;?)|(z-index\\s*:\\s*\\d+;?))", "")