-1

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

这是我获得“链接脚本”的方法:

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

因此,<script后跟一个或多个任意字符,后跟src=,后跟/>or </script>

这按预期工作。

现在我想得到所有没有 src 标签的脚本标签,在<script .....>and之间有一些javascript代码</script>,但我不知道该怎么做。我刚开始理解正则表达式,所以需要更有经验的 re guru 的帮助:)

更新 好的,亲爱的反对者。我在变量中有整个 html 页面的 html 代码。我想从中提取脚本标签。如何做到这一点,例如使用jquery?

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

不管用。那么,实现这一目标的方法是什么?

更新 2 我不需要用正则表达式来解决这个问题,但是因为现在我正在学习它们,所以我想我会尝试一下。我愿意接受任何其他解决方案。

4

2 回答 2

2

使用 创建一个 DOM 元素document.createElement,然后将其设置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,这当然也是可能的。)

于 2013-01-28T19:44:37.263 回答
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;
}
于 2014-02-26T00:23:01.090 回答