什么正则表达式会匹配这些数据?

sly*_*ete 0 javascript regex xhtml parsing html-parsing

我在XHTML文档中有以下内容:

<script type="text/javascript" id="JSBALLOONS">
    function() {
        this.init = function() {
            this.wAPI = new widgetAPI('__BALLOONS__');
            this.getRssFeed();
        };
    }
</script>
Run Code Online (Sandbox Code Playgroud)

我正在尝试选择两个脚本标记之间的所有内容.该id会一直JSBALLOONS是否有帮助.我知道如何选择包括脚本标签,但我不知道如何选择除脚本标签之外的内容.正则表达式的结果应该是:

    function() {
        this.init = function() {
            this.wAPI = new widgetAPI('__BALLOONS__');
            this.getRssFeed();
        };
    }
Run Code Online (Sandbox Code Playgroud)

mol*_*olf 8

(专门针对Javascript解决方案更新的帖子.)

在Javascript中,您的代码可能如下所示:

if (data.match(/<script[^>]+id="JSBALLOONS">([\S\s]*?)<\/script>/)) {
    inner_script = RegExp.$1;
}
Run Code Online (Sandbox Code Playgroud)

括号内的那一部分([\S\s]*?)由正则表达式引擎保存,并在找到匹配后可供您访问.在Javascript中,您可以使用RegExp.$1引用脚本标记内的匹配部分.如果你有一个以上的这样一个群体,()你可以用它来引用它们RegExp.$2,依此类推RegExp.$9.

默认情况下,Javascript与新行字符不匹配,因此我们必须使用([\S\s]*?)而不是(.*?),这可能更有意义.只是要完整,在其他语言中,如果使用s修饰符(/.../s),则不需要这样做.

(我必须补充一点,当从这样的HTML页面中抓取内容时,正则表达式通常非常脆弱.使用jQuery框架提取内容可能会更好.)