仅从脚本标记中提取javascript
Extract only javascript from a script tag
我只想从HTML文档中的脚本标记中提取javascript,并将其传递给像esprima这样的JS解析器。我正在使用nodejs编写这个应用程序,并将从脚本标记中提取的内容作为字符串。问题是从我想要删除的HTML文档中提取的javascript中存在HTML注释<!-- var a; -->
应转换为var a
简单移除<--
和-->
不起作用,因为它在移除中间-->
的情况<!-- if(j-->0); -->
中失败
我还想删除像[if !IE]
和[endif]
这样的标识符,它们有时会出现在脚本标记中。我还想提取CDATA段中的JS。<![CDATA[ var a; ]]>
应转换为var a
所有这些都可能使用正则表达式吗?还是需要更多的东西
简而言之,我想从脚本标记中清除JS,这样我就可以安全地将其传递到像esprima这样的解析器中
谢谢
编辑:
基于@user568109的回答。这是解析脚本标记中HTML注释和CDATA段的粗略代码
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()
这是解析器的工作。请参阅htmlparser2或esprima本身。请不要使用正则表达式来解析HTML,它很诱人。尝试匹配更多标签会浪费您宝贵的时间和精力。
页面中的一个示例:
var htmlparser = require("htmlparser2");
var parser = new htmlparser.Parser({
onopentag: function(name, attribs){
if(name === "script" && attribs.type === "text/javascript"){
console.log("JS! Hooray!");
}
},
ontext: function(text){
console.log("-->", text);
},
onclosetag: function(tagname){
if(tagname === "script"){
console.log("That's it?!");
}
}
});
parser.write("Xyz <script type='text/javascript'>var foo = '<<bar>>';</script>");
parser.end();
输出(简化):
--> Xyz
JS! Hooray!
--> var foo = '<<bar>>';
That's it?!
它会给你所有的标签div、注释、脚本等。但你必须自己在注释中验证脚本。此外,CDATA
是XML(XHTML)中的一个有效标记,因此htmlparser2会将其检测为注释,您也必须检查这些标记。
相关文章:
- 如何在HTML源代码中提取javascript变量
- 从CSV文件中提取JavaScript代码
- 从excel中提取Javascript
- 如何从html中提取javascript
- 如何在单击按钮后提取javascript中textarea的id(在本例中是动态的)
- 使用R从xml节点提取javascript语法
- 使用 PHP 在页面中提取 Javascript 的源代码
- 如何在 Java 中从 HTML 页面中提取 JavaScript 链接
- 在Poedit中提取javascript gettext
- 用于提取 javascript (.js) 类和方法结构的库
- 有没有办法从Google Docs/with Google Apps Script中的页面中提取JavaScript变量
- 使用 Babel CLI 提取器提取 Javascript 获取文本消息
- 安卓系统,使用javascript接口从webview中提取javascript变量
- 使用DOMDOCUMENT提取JavaScript值
- 如何使用正则表达式提取javascript变量
- 如何通过python从源页面中提取javascript创建的隐藏标签
- 仅从脚本标记中提取javascript
- 如何从下面的页面中提取JavaScript函数
- 正在提取JavaScript中的URL参数值
- 如何从网页中提取javascript动态数据