我有这个正则表达式(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
您认为我的表达中缺少什么? 我要接受有效的图片网址。
答案 0 :(得分:2)
您的表达式在我用(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缩小问题范围之后,更合适的regex语句应如下所示:/^(((http(s?))|((s?)ftp)):)([\w \D~!@#$%^&*\\_/-=+/?.:;',]){1,}\.(jpg|gif|png)$/i
让我们分解一下:
首先,它说它必须以带有可选的“ s”的“ http”开头,或者如果那里没有,它将寻找带有可选的“ s”前缀的“ ftp”,以说明ftp的安全形式。这之后必须加一个冒号。下一组几乎接受URL路径中的所有常用字符或符号。最后,它确保表达式以实际的图像扩展名结尾。将表达式包装在/{expression}/i
中表示该表达式不区分大小写,并且可以任意组合匹配大写或小写。
作为进一步说明,您可能还需要考虑.jpeg,.tif等的打印格式。