在JS中匹配之前未匹配的正则表达式(url vs picture)

时间:2016-12-06 21:31:52

标签: javascript angularjs regex

我想使用正则表达式替换文本中的各种模式。我目前正在区分“普通”链接,图片和YouTube视频:

图片链接 - > < img src =“link”>
yt - > < iframe href =“link”>
网站链接 - > < a href =“link”>

我正在使用以下正则表达式模式:

    var image_reg = /(http:\/\/|https:\/\/).*(gif|jpg|jpeg|tiff|png)/ig;
    var yt_reg = /(https:\/\/youtu.be\/|https:\/\/www.youtube.com\/watch\?v=)\S*/ig;
    var url_reg = /https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)(?!\")/ig;

我需要找到一种方法,以便在匹配为普通链接时确保链接不是图像或YT视频。

我目前正在使用以下不完美的解决方案: 我从图像正则表达式开始,然后是YT正则表达式。之后,我运行链接正则表达式并替换每个不以“符号结束的URL(因此不是iframe或img标记内的链接)

然而,这是非常冒险和丑陋的。 有什么更好的方法来实现我的目标?

1 个答案:

答案 0 :(得分:1)

您可以全局搜索所有链接,并在替换方法的回调中,检查该链接是否为youtube link / image以决定如何处理它。