В следующих примерах 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
Вот то, что у меня есть до сих пор, которое работает, когда присутствует строка запроса:
[^/]+?(.?(?=[\?]))
Но проблемы возникают правильно, когда строка запроса отсутствует. Я могу заставить его работать, но затем разбить его на строку запроса. Это должно быть регулярное выражение, другого метода.
Вы можете использовать выражение:
(?<=\/)[a-z-]+(?=[#a-z?=]+$|$)
(?<=\/)
Положительный lookbehind для /
.[az-]+
Алфавитные символы и -
.(?=[#az?=]+$|$)
Положительный lookahead для конца строки или любых символов, таких как #
?
, =
и буквенные символы в конце строки.Попробуйте здесь.
/some/path?hello=world#/matches-this-instead
)(?<=[az]\/)[az-]+(?=[#az?=]+$|$)
Az(?<=[az]\/)[az-]+(?=[#az?=]+$|$)
Az?(?<=[az]\/)[az-]+(?=[#az?=]+$|$)
Тогда? Это здесь