Заявление Regex для соответствия частям URL - PullRequest
0 голосов
/ 12 февраля 2019

Допустим, у меня есть эта строка;https://cdn.discordapp.com/attachments/000000000000000000/000000000000000000/imagename.png

В настоящее время у меня есть [^.]+$, но это соответствует только png , и я бы тоже хотел соответствовать image.Как бы я поступил так?Возможно ли иметь один оператор Regex, который соответствует image и png?

Ответы [ 3 ]

0 голосов
/ 12 февраля 2019

Если вы хотите совпадать только с imagename в вашей строке, используйте

[^/]+(?=\.[^/.]*$)

См. Демонстрационную версию regex

Если расширение может быть необязательным использование

[^/]+(?=(?:\.[^/.]*)?$)

См. эту демонстрационную версию регулярного выражения

Обратите внимание, что в зависимости от того, как вы объявляете регулярное выражение, вам может понадобиться экранировать / символов внутри шаблонов.

Подробности

  • [^/]+ - один или несколько символов, отличных от / ([^/] - это ( отрицательный класс символов )
  • (?=(?:\.[^/.]*)?$) - положительный прогноз, требующий немедленного соответствия следующих шаблонов справа от текущего местоположения:
    • \. - точка
    • [^/.]* - ноль или более символов, отличных от / и .
    • $ - конец строки.

* (?:\.[^/.]*)?является необязательной группой без захвата, вся последовательность шаблонов внутри является необязательной.

0 голосов
/ 12 февраля 2019

Если вы хотите сопоставить image и png, вы можете использовать 2 группы захвата и якорь $ для подтверждения конца строки.

([^/]+)\.([^/.]+)$

См. Демонстрационную версию regex101

Объяснение

  • ([^/]+) Группа захвата для захвата имени файла.Совпадение 1+ раз без косой черты
  • .` Совпадение с буквальной точкой
  • ([^./]+) Захват группы для захвата расширения.Совпадение 1+ раз, а не точка или косая черта
  • $ Утверждение конца строки
0 голосов
/ 12 февраля 2019

Попробуйте использовать это регулярное выражение для полного математического имени ( пример )

[^\/]+$

или для соответствия имени без расширения ( пример )

[^\/]+(?=\.png$)

объяснение

  • [^\/]+ соответствует любому символу, кроме косой черты (в JS мы можем уменьшить это значение до [^/])
  • (?=\.png$) положительный прогноз, который требует ".png "расширение (и конец строки $) после совпавших букв.

let s="https://cdn.discordapp.com/attachments/000000000000000000/000000000000000000/imagename.png";

console.log( s.match(/[^/]+$/)[0] )
console.log( s.match(/[^/]+(?=\.png$)/)[0] )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...