如何使用JavaScript提取多个脚本标记之间的代码块?
我有以下函数,它通过AJAX从URI中拉入Javascript块,并执行它:如何使用JavaScript提取多个脚本标记之间的代码块?,javascript,regex,Javascript,Regex,我有以下函数,它通过AJAX从URI中拉入Javascript块,并执行它: function loadViewViaAjax(url, callbackOnSuccess) { Ext.Ajax.request({ url: url, success: function(objServerResponse) { var responseText = objServerResponse.responseText;
function loadViewViaAjax(url, callbackOnSuccess) {
Ext.Ajax.request({
url: url,
success: function(objServerResponse) {
var responseText = objServerResponse.responseText;
var scripts, scriptsFinder=/<script[^>]*>([\s\S]+)<\/script>/gi;
while(scripts=scriptsFinder.exec(responseText)) {
eval.call(window,scripts[1]);
}
if(typeof callbackOnSuccess != 'undefined') {
callbackOnSuccess.call();
}
}
});
}
函数LoadViewViaJAX(url、callbackOnSuccess){
Ext.Ajax.request({
url:url,
成功:函数(objServerResponse){
var responseText=objServerResponse.responseText;
变量脚本,scriptsFinder=/]*>([\s\s]+)/gi;
while(scripts=scriptsFinder.exec(responseText)){
评估调用(窗口,脚本[1]);
}
if(callbackOnSuccess的类型!=“未定义”){
callbackOnSuccess.call();
}
}
});
}
例如,它拉入此文本,并执行脚本标记之间的所有内容:
<script type="text/javascript">
clearExtjsComponent(targetRegion);
var start_info_panel = new Ext.Panel({
padding: 10,
style: "margin: 10px",
width: 300,
html: '<h1>Html Item 1</h1>'
});
replaceComponentContent(targetRegion, start_info_panel);
</script>
clearExtjsComponent(targetRegion);
var开始信息面板=新的外部面板({
填充:10,
样式:“边距:10px”,
宽度:300,
html:'html项目1'
});
替换组件内容(目标区域、开始信息面板);
如何更改LoadViewViaJAX函数,使其执行多个脚本标记之间的所有内容,例如:
<script type="text/javascript">
clearExtjsComponent(targetRegion);
var start_info_panel = new Ext.Panel({
padding: 10,
style: "margin: 10px",
width: 300,
html: '<h1>Html Item 1</h1>'
});
replaceComponentContent(targetRegion, start_info_panel);
</script>
<script type="text/javascript">
clearExtjsComponent(targetRegion_help);
var help_panel = new Ext.Panel({
padding: 10,
style: "margin: 10px",
width: 300,
html: '<p>This is the help text.</p>'
});
replaceComponentContent(targetRegion_help, help_panel);
</script>
clearExtjsComponent(targetRegion);
var开始信息面板=新的外部面板({
填充:10,
样式:“边距:10px”,
宽度:300,
html:'html项目1'
});
替换组件内容(目标区域、开始信息面板);
clearExtjsComponent(targetRegion\u帮助);
var help_panel=新的外部面板({
填充:10,
样式:“边距:10px”,
宽度:300,
html:“这是帮助文本。”
});
替换组件内容(targetRegion\u帮助,帮助面板);
如果我阅读正确,这是惰性量词的经典用法:
/<script[^>]*>([\s\S]+?)<\/script>/gi
/]*>([\s\s]+?)/gi
另请参见:这就是我所说的用问号回答问题,非常有效!谢谢一定要小心,这个regexp会找到一个close标记,即使它在js字符串中。e、 g.
var foo=''代码>。给你错误的结果。@Tralamazza-这是真的,但真正的浏览器也无法通过测试:-这就是为什么你应该做var foo=''代码>,例如。可能]*>([\s\s]+?)[^']
works@Tralamazza-这将适用于您提到的确切情况,但是“a”
,或/
?您不能用简单的正则表达式解决它,您需要一个完整的解析器。。。