0

これの StackOverflow または Google で動作するデモが見つかりません。削除する必要がある領域を含む文字列があります。

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

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

<script language='javascript'>タグ自体を含め、と<script>pleaseの間のすべてのテキストを削除する手助けが必要です。私は試みました

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

何かを見つけるのに最も近かったのは、この 正規表現で、</script> タグの前または c# の script タグ内のテキストの間のテキストを置き換えます が、残念ながら葉巻はありません

4

3 に答える 3

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 に答える
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

これにより、すべてのスクリプト タグとその内容が削除されます。

于 2012-12-05T07:49:20.837 に答える
0

次の正規表現は、あなたが望むことをするはずです。

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

説明: [\s\S] グループは、'.' で始まるすべての文字に一致します。改行を除くすべての文字に一致します。そして、改行が必要です。

/m は正規表現を複数行にするため、1 行だけでなく複数行にまたがって一致します。

そうは言っても、あなたが尋ねたばかりの質問に答えたところです(正規表現を使用してそれを行う方法)が、より回復力があるため、これにはdomパーサーを使用する必要があることに同意します。(しかし、繰り返しになりますが、この正規表現はパフォーマンスの面でより高速である可能性があります。)

于 2012-12-05T08:11:09.413 に答える