在 javascript 中匹配索引 1 上的 iframe src

Matching iframe src on index 1 in javascript

我需要匹配索引 1 中 iframe src 的 url。我正在使用这个 matchAll 函数来匹配多个匹配项。

if (typeof RegExp.prototype.matchAll !== "function") {
    RegExp.prototype.matchAll = function(v) {
        var tmp     = ""+ this, // So this.toString
            src     = tmp.lastIndexOf("/"),
            pattern = tmp.substring(1, src),
            flags   = tmp.substring(src + 1, tmp.length);

        // Never forget "g", that prepends infinite loops for "while"
        if (flags.indexOf("g") == -1) {
            flags += "g";
        }

        var re = new RegExp(pattern, flags);
        var ms = [], m;
        while (m = re.exec(v)) {
            ms.push(m);
        }
        return ms;
    };
}

使用此测试代码:

str = '<iframe width="560" height="315" src="https://www.youtube.com/embed/8L-6Hw7CZLQ" frameborder="0" allowfullscreen></iframe>';
var pattern = /\[embed\](.*?)\[\/embed\]|<iframe.*?src="(.*?)".*?<\/iframe>/;
var matches = pattern.matchAll(str);
console.log(matches);

我确实得到了 src,但是在索引 2 上,我需要它在索引 1 上,因为该模式实际上匹配使用索引 1 作为 "url" 的其他东西,所以我宁愿匹配所有 urls 在该索引上,而不是修改整个代码。

在任何 iframe 的索引 1 上获取 src url 的正确模式是什么?

要使 iframe url 和嵌入 url 都出现在索引 1 上。请尝试以下代码:

var pattern = /(?:(?:<iframe.*?src=")|(?:\[embed\]))(.*?)(?:\"|(?=\[\/embed\]))/;

这应该有效。它匹配 iframe 的 src 和同一组 (Group1) 中的 [embed][/embed] 之间。

var pattern = /(?:(?:\[embed\])|(?:<iframe.*?src="))(.*?)(?:(?:\[\/embed\])|(?:".*?<\/iframe>))/;