JS Regex:从html获取内联javascript

时间:2013-01-28 19:24:28

标签: javascript regex

我需要从html字符串中获取所有脚本标记,将内联脚本和“链接”脚本分开。内联脚本是指没有src属性的脚本标记。

以下是我如何获得“链接脚本”:

<script(.)+src=(.)+(/>|</script>)

所以,让<script后跟一个或多个任意字符,然后是src=,然后是/></script>

这可以按预期工作。

现在我想获得所有没有src标记的脚本标记,在<script .....></script>之间有一些javascript代码,但我无法弄清楚如何做到这一点。我刚开始理解正则表达式,所以有经验的r.e.的帮助。需要大师:))

更新 好的,亲爱的downvoters。我有一个变量中的整个html页面的html代码。我想从中提取脚本标签。怎么做,用例如jquery?

var dom = $(html);
console.log(html.find('script');

不起作用。那么,实现这个目标的方法是什么?

更新2 我不需要用正则表达式解决这个问题,但因为现在我正在了解它们,我想我会尝试一下。我打开任何其他解决方案。

2 个答案:

答案 0 :(得分:2)

使用document.createElement创建DOM元素,然后将其innerHTML设置为HTML字符串的内容。这将使用浏览器的内置解析器自动解析您的HTML,并用子项填充新创建的元素。

dummyDoc = document.createElement("html");
dummyDoc.innerHTML = "<body><script>alert('foo');</script></body>"; // or myInput.value
var dom = $(dummyDoc);
var scripts = dom.find('script');

(我只使用jQuery,因为你在你的问题中这样做。如果没有jQuery,这当然也是可能的。)

答案 1 :(得分:1)

如果您处于没有dom访问权限的位置(nodejs?),您将被迫使用正则表达式。这是一个在类似情况下对我有用的解决方案:

function scrapeInlineScripts(sHtml) {
    var a = sHtml.split(/<script[^>]*>/).join('</script>').split('</script>'),
        s = '';

    for (var n=1; n<a.length; n+=2) {
        s += a[n];
    }
    return s;
}