【问题标题】:Using Regex to strip certain CSS properties out of an HTML string使用正则表达式从 HTML 字符串中去除某些 CSS 属性
【发布时间】:2014-11-21 19:09:34
【问题描述】:

我有一个 Telerik RadEditor,用户可以将 HTML 输入编辑器并保存到我的数据库中。大多数情况下,这很好用,但是当有一个 css 属性 position: absolute; 时,我遇到了某些实例的问题。或 z-index:100; (对于 z-index 可以是任何 #)在元素的 style 属性中。

我查看了 Telerik 选项,没有看到开箱即用的解决方案(如果我错了,请纠正我),但我基本上是在尝试找到一个正则表达式,我可以使用它来去除后面的代码。该项目使用 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*))([^;]+)", "")

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

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

  • 位置:绝对;
  • 位置:绝对;
  • 位置:绝对
  • 位置:绝对的
  • z-index: anyInt;
  • z-index : anyInt;
  • z-index: anyInt
  • z-index : anyInt

唯一的其他要求是我删除所有出现的事件,而不仅仅是第一个。任何解决此问题的帮助将不胜感激!

【问题讨论】:

    标签: html css regex vb.net telerik


    【解决方案1】:

    如果我明白:

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

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

    或者:

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

    【讨论】:

    • 这几乎是我所需要的,因为位置和 z-index 以及它们的值都被删除了,但是分号被留下了,例如 '
      '
    • 啊,没关系,我错过了您示例末尾的分号...这有效,标记为正确响应!
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      试试this

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

      您需要使用RegexOptions.Multiline 来替换所有出现的模式。 我使用了RegexOptions.IgnoreCase,因此正则表达式引擎将独立于字母大小写替换出现的事件。

      希望对你有帮助。

      【讨论】:

        猜你喜欢
        相关资源
        最近更新 更多
        热门标签