我无法在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# 但不幸的是没有雪茄
答案 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解析器,因为它更具弹性。 (但话说回来,这个正则表达可能会更快地表现出来。)