2011-06-24 14 views
3

私は、C#と正規表現を使用してHTMLファイルからjavascriptコードを取得しようとしています。 私が今使用したコードは次のとおりです。htmlファイルからjavascriptコードを取得

string js = Regex.Replace(code, @"^.*?\<script\s?.*?\>((.|\r\n)+?)\<\/script\>.*$", "$1", RegexOptions.Multiline); 

しかし、私はこれを使用するとき、私は取り除かスクリプトタグとの完全なHTMLコードを取得します。

誰かがこれを手伝ってくれますか?


私は次のコードで、今のhtml敏捷性パックを使用します。

var hwObject = new HtmlWeb(); 
     HtmlDocument doc = new HtmlDocument(); 
     doc.LoadHtml(code); 
     foreach (var script in doc.DocumentNode.Descendants("script").ToArray()) 
     { 
      string js = script.InnerText; 
      HtmlTextNode text = (HtmlTextNode)script.ChildNodes.Single(d => d.NodeType == HtmlNodeType.Text); 
      text.Text = TrimJs(js); 
     } 

しかし、唯一の最後のスクリプトタグの取得の置き換え。以前のjavascriptsは消える前に。

+0

あなたがそのような決定を自由にしている場合は、代わりに[HTMLアジリティパック](http://htmlagilitypack.codeplex.com/)を使用する必要があります。 – Bobby

+0

私はあなたがスクリプトだけを手に入れたいと思っているから、スクリプト以外のものは何ですか? – ub1k

+0

私はHTMLとスクリプトを取得しますが、スクリプトタグのhavは消えました。 – Jerodev

答えて

9

を。

正規表現を使用するよりも、XMLベースのパーサーを使用してHTMLを解析する方が一般に簡単です。

あなたはこのようなものを使用することができます

HtmlWeb hwObject = new HtmlWeb(); 
HtmlDocument htmldocObject = hwObject.Load("http://www..."); 
foreach(var script in doc.DocumentNode.Descendants("script").ToArray()) 
{ 
    string s = script.InnerText; 
    // Modify s somehow 
    HtmlTextNode text = (HtmlTextNode)script.ChildNodes 
         .Single(d => d.NodeType == HtmlNodeType.Text); 
    text.Text = s; 
} 
htmldocObject .Save("file.htm"); 
あなたは、これはすべてが含まれている理由です、そしてあなたは、サブストリングを探している時に交換してください使用する理由がないとして、 "^.*?"".*$"削除する必要が
+0

これはすばらしい答えです。 @ Ryan Grossと合意したHTMLは通常の言語ではなく、正規表現を使ってHTMLを解析することは一般的には良い考えではないと言わざるを得ない。 – FishBasketGordo

+0

これは素晴らしく、スクリプトタグ間のコードを別のものに置き換えることはできますか? – Jerodev

+0

InnerTextプロパティは読み込み専用ですが、Textプロパティを設定しようとするといいでしょう。 –

0

はドロップ*(以下の正規表現を使用します\<script\s?.*?\>((.|\r\n)+?)\<\/script\>)。あなたはHtml Agility Packを見てみる必要があります

+0

これは同じ結果をもたらします。 – Jerodev

2

。 Regex.Matchメソッドを使うだけで良いと思います。

+0

はい、後でコード内のjavascriptを置き換えたいと思います。これはちょうど私がjavascriptコードを得ることができるかどうかをテストすることでした。 – Jerodev

+0

これはあなたのページに空のスクリプトがあるためかもしれません。 試してみてください: '\ ((。| \ r \ n)*?)\ <\/script\>' –

関連する問題