Выражение Regex исключает ссылки со странным URL - PullRequest
1 голос
/ 03 ноября 2019

У меня есть это регулярное выражение (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 изображения.

1 Ответ

2 голосов
/ 03 ноября 2019

Ваше выражение работает для меня в валидаторе, с которым я тестировал ( regex101.com ), однако он соответствует 3 отдельным группам захвата. Чтобы захватить все как одно совпадение, просто заключите весь оператор в набор скобок.

Примечание: для ясности, есть более простые способы сделать это, но ответить на конкретный вопрос, заданный ОП, это сделает их оператор совпадающим с предоставленной им ссылкой.

((http|ftp|https):\/\/([\w+?\.\w+])+([a-zA-Z0-9\\~\\!\\@\\#\\$\\%\\^\\&\\*\\(\\)_\-\\=\\+\\\\\/\\?\\.\\:\\;\\'\\,]*\.(?:jpg|JPG|jpeg|JPEG|gif|GIF|png|PNG|bmp|BMP|tiff|TIFF))?)

РЕДАКТИРОВАТЬ: После того, как ОП поможет сузить сферу их проблемы, более подходящее выражение регулярного выражения будет выглядеть примерно так: /^(((http(s?))|((s?)ftp)):)([\w \D~!@#$%^&*\\_/-=+/?.:;',]){1,}\.(jpg|gif|png)$/i

Давайте разберемся с этим: во-первых, это говорит о том, что он должен начинаться либо с 'http' с необязательным 's', либо, если его там нет, он будет искать 'ftp' с необязательным 's', префиксируя егоучитывать безопасные формы FTP. это должно сопровождаться двоеточием. Следующий набор принимает практически любой обычно используемый символ или символ в пути URL. Наконец, он гарантирует, что выражение заканчивается фактическим расширением изображения. перенос выражения в /{expression}/i указывает на то, что выражение нечувствительно к регистру и будет соответствовать как верхнему, так и нижнему регистру в любой комбинации.

В качестве дальнейшего примечания вы также можете учесть форматы печати.jpeg, .tif и т. д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...