如何使用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;

我有以下函数,它通过AJAX从URI中拉入Javascript块,并执行它:

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”
,或
/
?您不能用简单的正则表达式解决它,您需要一个完整的解析器。。。