正则表达式替换标记<script language =“javascript”>和</script>之间的文本

时间:2012-12-05 07:39:14

标签: regex vb.net replace tags

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

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

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

我需要帮助删除<script language='javascript'><script>之间的所有文字,包括版本本身。 我试过了

  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# 但不幸的是没有雪茄

3 个答案:

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

这将删除所有脚本标记及其内容。

答案 1 :(得分:1)

这是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

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

答案 2 :(得分:0)

以下正则表达式应该做你想要的。

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

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

/ m生成正则表达式多行,因此它匹配多行而不是一行。

话虽如此:我刚刚回答了你刚刚提出的问题(如何使用regexp),但我确实同意你应该使用dom解析器,因为它更具弹性。 (但话说回来,这个正则表达可能会更快地表现出来。)