【问题标题】:Javascript Regular Expression for non-image url非图像网址的 Javascript 正则表达式
【发布时间】:2014-01-04 09:39:08
【问题描述】:

在 JavaScript 中,我想从字符串中提取非图像 url,例如

http://example.com

http://example.com/a.png

http://www.example.ccom/acd.php

http://www.example.com/b.jpg

我想提取第 1 个和第 3 个(非图像)网址并忽略第 2 个和第 4 个(图像)网址。

我尝试了以下方法,但没有成功

(https?:)?\/\/?[^\'"<>]+?^(\.(jpe?g|gif|png))

以下图片 URL 正则表达式 (RE) 的修改是我为上面的 sn-p 添加的 ^()(不是)

(https?:)?//?[^\'"<>]+?\.(jpg|jpeg|gif|png)

注意:以上示例中的 RE 是区分大小写的,如果有任何线索可以使 RE 不区分大小写

【问题讨论】:

  • 为什么不尝试匹配这些图像,如果匹配则拒绝它们?语法^() 并不表示'not',它表示换行符,然后尝试匹配里面的内容。
  • 一个选项可能是使用 curl 来检查 url 是否是图像
  • 在哪里否定?如果可以请提供上述 sn-p 的修改版本?

标签: javascript regex url


【解决方案1】:

您可以使用negative lookahead 之类的these examples 它将排除带有字符串的任何内容 假设您的网址像您的示例一样以换行符分隔,这样的事情应该可以工作

(?!.*(jpg|jpeg|gif|png).*).*

编辑:看起来我的示例不起作用,希望它至少将 oyu 指向正确的方向

【讨论】:

  • 即使它有效,它也不适用于像http://example.com/gifts/index 这样的网址,因为gif 将匹配gifts。理想情况下,需要的是负面的后视,但 JS 不支持,
  • 您好 Eru,感谢您的回答,但这对我不起作用,因为 (https?:)?\/\/?[^\'"&lt;&gt;]+(?!.*(jpg|jpeg|gif|png).*).* 对于图像或非图像 url 都返回 true。可能是我错过了你的观点,即在哪里使用你的否定 sn-p。
【解决方案2】:

首先删除图像:

var tmp = text.replace(/https?:\/\/[\S]+\.(png|jpeg|jpg|gif)/gi, '');

然后匹配:

var m = tmp.match(/https?:\/\/[\S]+/gi);
console.log(m);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-11
    • 2021-03-14
    相关资源
    最近更新 更多