Regex, получение конца адреса сервера - PullRequest
0 голосов
/ 26 апреля 2018

Не могу понять, почему это не работает. Мне нужно захватить только адрес сервера (до / или?, В зависимости от того, что наступит раньше), а затем все, что осталось в другой группе захвата. Итак:

http://something.com/path?query=hello/goodbye

становится

g1:  http://
g2:  something.com
g3:  /path?query=hello/goodbye

Но в каждом регулярном выражении, которое я пробую, группа захвата адресов сервера включает косую черту:

/(https?:\/\/)(.+)([\/\?].+)/
/(https?:\/\/)(.+)(\/|\?.+)/

Дайте мне:

g1:  http://
g2:  something.com/path
g3:  ?query=hello/goodbye

Я даже пытался сказать «не косая черта», или я так подумал, но это не сработало:

/(https?:\/\/)([.^\/]+)(\/|\?.+)/

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

Для вашего регулярного выражения (https?:\/\/)(.+?)([\/\?].+) вы почти там.

Вы можете сделать (.*) part не жадным : (.*?) в соответствии с адресом сервера.

(https?:\/\/)(.+?)([\/\?].+)

Обратите внимание, что вы используете 3 группы захвата, но в соответствии с вашим вопросом вы хотите захватить только адрес сервера и все, что осталось в другой группе захвата. Вы можете начать регулярное выражение с группы без захвата (?:, чтобы получить только 2 группы.

0 голосов
/ 26 апреля 2018

Вы можете использовать RegEx (https?:\/\/)([^\/?]*)(.*)

  • (https?:\/\/) совпадений http:// или https://

  • ([^\/?]*) соответствует чему угодно до / или ?

  • (.*) соответствует тому, что осталось

Демо-версия.

...