0

我在 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>", "")

最近我找到的东西是这个 正则表达式来替换 </script> 标记之前的文本或 c# 中脚本标记中的文本之间的文本, 但不幸的是没有雪茄

4

3 回答 3

1

This looks like a job for an XML parser:

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

This removes all script tags, along with their contents.

于 2012-12-05T07:49:20.837 回答
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节点,然后删除这些节点的内容。languagejavascript

于 2012-12-05T08:46:48.407 回答
0

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

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

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

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

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

于 2012-12-05T08:11:09.413 回答