OK、Kolinkの答えを拡張するために、iframeやイベントハンドラーは必要ありません。
var temp = document.createElement('div');
temp.innerHTML = otherHtml;
var scripts = temp.getElementsByTagName('script');
...現在、scriptsはスクリプト要素のDOMコレクションです-そしてスクリプトは実行されません...
正規表現がこのための素晴らしいアイデアではない理由:
<script>
要素には文字列がどこにも含まれていない可能性があるため、それら</script>
に一致する正規表現を作成することは難しくありません。/<script[.\n]+?<\/script>/gi
特定のタイプ属性を持つスクリプトのみを照合したいようです。あなたもそれをあなたのパターンに含めることを試みることができます:/<script[^>]+type\s*=\s*(["']?)blahblah\1[.\n]*?<\/script>/gi
-しかしそれは恐ろしいです。(これは、不規則な文字列に正規表現を使用する場合に発生することです。単純化する必要があります)
したがって、代わりに、一致するすべての基本的なスクリプトを繰り返し処理し、開始タグを抽出します。result.match(/<script[^>]*>/i)[0]
その中で、type属性を検索します/type\s*=\s*((["'])blahblah\2|\bblahblah\b)/.test(startTag)
。ほら-恐ろしいことに戻った-単純化!
今回は正規化を介して:
startTag = startTag.replace(/\s*=\s*/g, '=').replace(/=([^\s"'>]+)/g, '="$1"')
-今あなたは危険な領域にいます=
、引用された文字列の中にある場合はどうなりますか?それがどんどん複雑になっているのがわかりますか?
正規表現を使用してこの作業を行うことができるのは、使用するHTMLについて確固たる仮定を立てる場合(つまり、正規表現にする場合)のみです。そうでなければ、あなたの問題は成長し、成長し、成長します!
- 免責事項:私は、彼らが私が言うことを実行するかどうかを確認するために使用される正規表現をテストしていません。それらは単なる例の試みです。