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

时间:2016-11-25 01:59:33

标签: javascript regex iframe match regex-lookarounds

我需要匹配索引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”的其他东西,所以我宁愿匹配该索引上的所有url修改整个代码。

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

2 个答案:

答案 0 :(得分:0)

要使iframe网址和嵌入网址都显示在索引1上,请尝试以下代码:

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

答案 1 :(得分:0)

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

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