JS Regexp:从 html 获取内联 JavaScript

JS Regexp: get the inline javascripts from html

本文关键字:JavaScript 获取 html Regexp JS      更新时间:2023-09-26

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

以下是我获取"链接脚本"的方法:

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

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

这按预期工作。

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

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

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

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

更新 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的情况下实现。

如果你处于没有 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;
}