Как получить путь или слаг из URL без дополнительных параметров строки запроса

1

В следующих примерах URL:

http://something.com/hello/world/this-is-a-slug
http://something.com/hello/world/this-is-a-slug#awesome           
http://something.com/hello/world/this-is-a-slug?awesome=yes#world
/hello/world/this-is-a-slug
etc

Мне нужно this-is-a-slug

Вот то, что у меня есть до сих пор, которое работает, когда присутствует строка запроса:

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

Но проблемы возникают правильно, когда строка запроса отсутствует. Я могу заставить его работать, но затем разбить его на строку запроса. Это должно быть регулярное выражение, другого метода.

Теги:

1 ответ

2
Лучший ответ

Вы можете использовать выражение:

(?<=\/)[a-z-]+(?=[#a-z?=]+$|$)
  • (?<=\/) Положительный lookbehind для /.
  • [az-]+ Алфавитные символы и -.
  • (?=[#az?=]+$|$) Положительный lookahead для конца строки или любых символов, таких как # ? , = и буквенные символы в конце строки.

Попробуйте здесь.

  • 0
    Проблема, с которой я здесь сталкиваюсь, заключается в том, что если URL-адрес имеет косую черту после строки запроса или хэша, он получает неправильное значение (то есть /some/path?hello=world#/matches-this-instead )
  • 1
    Используйте (?<=[az]\/)[az-]+(?=[#az?=]+$|$) Az (?<=[az]\/)[az-]+(?=[#az?=]+$|$) Az? (?<=[az]\/)[az-]+(?=[#az?=]+$|$) Тогда? Это здесь

Ещё вопросы

Сообщество Overcoder
Наверх
Меню