-1

インラインスクリプトと「リンクされた」スクリプトを分離して、HTML文字列からすべてのスクリプトタグを取得する必要があります。srcインライン スクリプトとは、属性のないスクリプト タグを意味します。

「リンクされたスクリプト」を取得する方法は次のとおりです。

<script(.)+src=(.)+(/>|</script>)

そのため、<script1 つ以上の任意の文字が続きsrc=、その後に 、/>またはが続き</script>ます。

これは期待どおりに機能します。

今、私は src タグなしですべてのスクリプトタグを取得したいと思って<script .....></script>ます。私は正規表現を理解し始めたばかりなので、より経験豊富な正規表現の専門家の助けが必要です:)

更新 OK、親愛なる反対票を投じてください。変数にhtmlページ全体のhtmlコードがあります。そこからスクリプトタグを抽出したい。たとえばjqueryを使用して、それを行う方法は?

var dom = $(html);
console.log(html.find('script');

動作しないでしょう。それで、それを達成する方法は何ですか?

UPDATE 2 この問題を正規表現で解決する必要はありませんが、今はそれらについて学んでいるので、試してみようと思いました。私は他の解決策のために開かれています。

4

2 に答える 2

2

を使用してDOM要素を作成し、それをHTML文字列のコンテンツにdocument.createElement設定します。innerHTMLこれにより、ブラウザの組み込みパーサーを使用してHTMLが自動的に解析され、新しく作成された要素が子で埋められます。

dummyDoc = document.createElement("html");
dummyDoc.innerHTML = "<body><script>alert('foo');</script></body>"; // or myInput.value
var dom = $(dummyDoc);
var scripts = dom.find('script');

(私はあなたがあなたの質問でそうするのでjQueryだけを使います。これは確かにjQueryなしでも可能です。)

于 2013-01-28T19:44:37.263 に答える
1

dom アクセスが利用できない位置にいる場合 (nodejs?)、正規表現の使用を余儀なくされます。同様の状況で私のために働いた解決策は次のとおりです。

function scrapeInlineScripts(sHtml) {
    var a = sHtml.split(/<script[^>]*>/).join('</script>').split('</script>'),
        s = '';

    for (var n=1; n<a.length; n+=2) {
        s += a[n];
    }
    return s;
}
于 2014-02-26T00:23:01.090 に答える