OK,延長Kolink的答案,你不需要一個iframe或事件處理程序:
var temp = document.createElement('div');
temp.innerHTML = otherHtml;
var scripts = temp.getElementsByTagName('script');
...現在的腳本是腳本元素的DOM集合 - 和腳本不得到執行......
爲什麼正則表達式是不是這一個奇妙的想法:
作爲<script>
元素不能合作在任何地方都可以使用字符串</script>
,編寫正則表達式來匹配它們並不困難:/<script[.\n]+?<\/script>/gi
看起來您只想匹配具有特定類型屬性的腳本。你也可以嘗試將其納入你的模式:/<script[^>]+type\s*=\s*(["']?)blahblah\1[.\n]*?<\/script>/gi
- 但那太可怕了。 (這時候,您使用不規則的字符串的正則表達式,你需要簡化會發生什麼)
因此,你遍歷所有基本匹配的腳本,提取起始標籤:result.match(/<script[^>]*>/i)[0]
和內,尋找你的類型屬性/type\s*=\s*((["'])blahblah\2|\bblahblah\b)/.test(startTag)
。噢,看起來 - 這很糟糕 - 簡化!
這次通過規範化: startTag = startTag.replace(/\s*=\s*/g, '=').replace(/=([^\s"'>]+)/g, '="$1"')
- 現在您處於危險區域,如果=
位於帶引號的字符串內怎麼辦?你能看到它變得越來越複雜嗎?
如果您對使用HTML進行可靠的假設(即使其定期使用),則只能使用正則表達式進行此項工作。否則,你的問題將會增長,併成長!
- 免責聲明:我還沒有測試任何正則表達式用於查看他們是否按照我所說的來做,他們只是示例嘗試。
[他來的小馬...](http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454) – 2012-07-06 19:10:25
你能給一些*特定的*例子。顯示您嘗試的* exact *代碼和您用於測試它的* exact *輸入字符串。 – 2012-07-06 19:10:49
...但現在的問題是'更簡單'像/ \ s * h \ s */g。我不確定這個問題是否特別針對與HTML匹配 - 這是關於觀察/察覺的怪異。 – 2012-07-06 19:19:51