javascript - 正则表达式排除带有奇怪 URL 的链接
问题描述
我有这个正则表达式(Java / JavaScript)
/(http|ftp|https):\/\/([\w+?\.\w+])+([a-zA-Z0-9\\~\\!\\@\\#\\$\\%\\^\\&\\*\\(\\)_\-\\=\\+\\\\\/\\?\\.\\:\\;\\'\\,]*\.(?:jpg|JPG|jpeg|JPEG|gif|GIF|png|PNG|bmp|BMP|tiff|TIFF))?/
但它似乎对这样的 URL 有问题:
https://cdn.vox-cdn.com/thumbor/C07imD1SHmAnbObkg-nJ92N6sD8=/0x0:4799x3199/920x613/filters:focal(2017x1217:2783x1983):format(webp)/cdn.vox-cdn.com/uploads/chorus_image/image/62871037/seattle.0.jpg
你认为我的表达中缺少什么?我想接受有效的图片 URL。
解决方案
您的表达式在我使用(regex101.com)测试的验证器中对我有用,但是,它匹配为 3 个单独的捕获组。要将其全部捕获为单个匹配项,只需将整个语句包装在一组括号中。
注意:要清楚,有更简单的方法可以做到这一点,但要回答 OP 提出的具体问题,这将使他们的陈述与他们提供的链接相匹配。
((http|ftp|https):\/\/([\w+?\.\w+])+([a-zA-Z0-9\\~\\!\\@\\#\\$\\%\\^\\&\\*\\(\\)_\-\\=\\+\\\\\/\\?\\.\\:\\;\\'\\,]*\.(?:jpg|JPG|jpeg|JPEG|gif|GIF|png|PNG|bmp|BMP|tiff|TIFF))?)
编辑:在协助 OP 缩小他们的问题范围后,更合适的正则表达式语句将是这样的:/^(((http(s?))|((s?)ftp)):)([\w \D~!@#$%^&*\\_/-=+/?.:;',]){1,}\.(jpg|gif|png)$/i
让我们分解一下:首先,它必须以带有可选“s”的“http”开头,或者如果不存在,它将查找带有可选“s”前缀的“ftp”,以说明安全形式FTP。这必须跟一个冒号。下一组接受 url 路径中几乎所有常用的字符或符号。最后,它确保表达式以实际的图像扩展名结束。将表达式包装在中/{expression}/i
表示该表达式不区分大小写,它将以任意组合匹配大写或小写。
作为进一步说明,您可能还需要考虑 .jpeg、.tif 等的打印格式。
推荐阅读
- sql-server - db 中过去 24 小时的 10 分钟聚合
- jquery - if语句供用户准时输入
- plsql - 为什么我在尝试调用过程时得到 ORA-06531: reference to uninitialized collection?
- apache - .htaccess 用于目录和子目录级别
- ruby-on-rails - 路由在哪里适合 mvc 架构
- javascript - Sharepoint 2013 本地 NewForm 列表 javascript 逻辑未触发
- python - 如何停止 Python 混合具有相同名称的子目录?
- r - ggplot:为什么在图例的填充中打印自动文本?
- php - SELECT 列表的表达式 #1 不在 GROUP BY 子句中,并且包含非聚合列。仅在共享主机 cPanel 中出现错误
- linux-kernel - 使用 Olimex ARM-USB-OCD 适配器在 ARMv7 上进行远程内核调试