检查URL是否匹配多个正则表达式变量?

时间:2016-11-14 20:39:43

标签: javascript jquery regex

我正在制作一个jquery插件,它将嵌入来自youtube和vimeo(以及最终其他网站)的视频。现在我有这个代码:

(function($) { 
    $.fn.embedFrame = function() {
        var youtube = /^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=)([^#\&\?]*).*/;
        var vimeo = /(?:http?s?:\/\/)?(?:www\.)?(?:vimeo\.com)\/?(.+)/g;

        this.filter("a").html(function() {
            // CHECK IF THE LINK HREF MATCHES ANY OF THE ABOVE REGEX VARIABLE RULES

            // IF THE HREF MATCHES, RETURN AN IFRAME EMBED OF THE VIDEO
        });

        return this;
    };
}(jQuery));

我有几个问题:

  1. 如何检查链接href是否符合任何正则表达式规则?
  2. 有没有更好的方法来组织我的代码?我计划将来添加更多视频网站。
  3. 感谢。

1 个答案:

答案 0 :(得分:1)

将正则表达式保存在数组或对象中,然后迭代并检查链接是否与其中任何一个匹配

(function($) { 
    $.fn.embedFrame = function() {
        var filter = {
            youtube : /^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=)([^#\&\?]*).*/,
            vimeo   : /(?:http?s?:\/\/)?(?:www\.)?(?:vimeo\.com)\/?(.+)/g
        }

        var videos = this.filter(function(_, el) {
            if ( el.tagName.toLowerCase() !== 'a' ) return false;

            return Object.keys(filter).some(function(reg) {
                return filter[reg].test( el.href );
            });
        });

        return this;
    };
}(jQuery));

FIDDLE