【问题标题】:regex replace text between tags <script language='javascript'> and </script>正则表达式替换标签 <script language='javascript'> 和 </script> 之间的文本
【发布时间】:2012-12-05 07:39:14
【问题描述】:

我在 StackOverflow 或 Google 上找不到这个的工作演示。 我有一个字符串,其中包含我需要删除的区域。

    </tr>
    </table>
</div>

<script language='javascript'>
//Lots of javascript here
</script>

我需要帮助删除&lt;script language='javascript'&gt;&lt;script&gt; 之间的所有文本,包括标签本身。 我试过了

  Dim str As String = Regex.Replace(mystring,"\<script language='javascript'>(.*?)\</script>", "")

我最接近找到的东西是这个 Regular expression to replace text before </script> tag or between text in script tag in c# 但不幸的是没有雪茄

【问题讨论】:

标签: regex vb.net replace tags


【解决方案1】:

这看起来像是一个 XML 解析器的工作:

Dim xm = New XmlDocument()
xm.LoadXml(String.Format("{0}", str))
Dim scripts = xm.DocumentElement.SelectNodes("script")
For Each s In scripts
    xm.DocumentElement.RemoveChild(s)
Next
str = xm.DocumentElement.InnerXml

这会删除所有脚本标签及其内容。

【讨论】:

    【解决方案2】:

    这是 HTML 解析器的工作。通过使用HtmlAgilityPack:

    Dim doc = New HtmlDocument()
    doc.LoadHtml(html)
    Dim scriptNodes = doc.DocumentNode.SelectNodes("//script[@language='javascript']").ToList()
    
    For Each scriptNode As HtmlNode In scriptNodes
        scriptNode.InnerHtml = String.Empty
    Next
    
    Dim result = doc.DocumentNode.InnerHtml
    

    这将选择具有language 属性的script 节点 设置为javascript,然后删除这些节点的内容。

    【讨论】:

      【解决方案3】:

      以下正则表达式应该可以满足您的需求。

      /<script.*>([\s\S]*)</script>/m
      

      说明: [\s\S] 组匹配 '.' 所在的所有字符匹配所有字符 - 除了 - 换行符。我们需要换行符。

      /m 使正则表达式变为多行,因此它匹配多行而不是仅一行。

      话虽这么说:我刚刚回答了您刚刚提出的问题(如何使用正则表达式来处理它),但是我同意您应该为此使用 dom 解析器,因为它更有弹性。 (但话又说回来,这个正则表达式在性能方面可能更快。)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-02-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-26
        相关资源
        最近更新 更多