我想從HTML文檔中的腳本標記中僅提取javascript,我想將它傳遞給JS解析器,如esprima。我正在使用nodejs編寫該應用程序,並將內容從腳本標記中提取爲字符串。 問題是,當我想從HTML文檔中提取的JavaScript中有HTML註釋時,我想要刪除它。
<!-- var a; -->
應轉換爲var a
一個簡單的去除<--
和-->
不起作用,因爲它的情況下<!-- if(j-->0); -->
它消除了中間-->
我也想去掉標識符像[if !IE]
和[endif]
它們有時會發現失敗內部腳本標籤。 我也想提取JS內部的CDATA段。
<![CDATA[ var a; ]]>
應該轉換爲var a
這一切都可能使用正則表達式還是更需要?
總之,我想從腳本標記中清理JS,以便我可以安全地將它傳遞到像esprima這樣的解析器。
謝謝!編號:
基於@ user568109的回答。這是粗略的代碼,通過HTML註釋和CDATA段解析腳本內標籤
只從腳本標記中提取javascript
var htmlparser = require("htmlparser2");
var jstext = '';
var parser = new htmlparser.Pavar htmlparser = require("htmlparser2");
var jstext = '';
var parser = new htmlparser.Parser({
onopentag: function(name, attribs){
if(name === "script" && attribs.type === "text/javascript"){
jstext = '';
//console.log("JS! Hooray!");
}
},
ontext: function(text) {
jstext += text;
},
onclosetag: function(tagname) {
if(tagname === "script") {
console.log(jstext);
jstext = '';
}
},
oncomment : function(data) {
if(jstext) {
jstext += data;
}
}
}, {
xmlMode:true
});
parser.write(input);
parser.end()
您可以使用正則表達式來執行此操作。在你的瀏覽器中試試這個簡單的正則表達式...'「<! - if test(j - > 3) - >」替換(/^ $/g,「$ 1」)'並完成你的工作。 – mohkhan
是否有一個更系統的方法來做到這一點,因爲似乎有這麼多的情況下,沒有有效的JS內部腳本標記。 CDATA和htmlcomments只是我到目前爲止遇到的一些案例。 – everconfusedGuy
'很多情況下,沒有有效的JS內部腳本標記。'如果它不是有效的JS,有什麼意思將它們拉出來? – kennypu