2012-12-05 80 views
0

我找不到在StackOverflow或谷歌這個工作演示。 我有一個字符串,其中包含我需要刪除的區域。正則表達式替換標籤之間的文本<腳本語言='javascript'>和</script>

</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# 但沒有雪茄不幸

+1

[不要使用正則表達式解析html](http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags)使用dom解析器。 – Leri

回答

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 

這將刪除所有腳本標籤及其內容。

0

下面的正則表達式應該做你想做的。

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

說明: '' 的[\ S \ S]組的所有字符匹配,其中匹配所有字符 - 除了換行符。我們想要換行符。

/m使正則表達式多行,因此它匹配多行而不是一個。

這就是說:我只是回答了你剛剛問過的問題(如何用正則表達式),但我確實同意你應該使用dom解析器,因爲它更具彈性。 (但是,再次,這個正則表達式可能會更快地表現明智。)

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 

此選擇具有language屬性 組script節點javascript,然後刪除這些節點的內容。

相關問題