Совпадение текста после последнего появления sla sh, включая косую черту - PullRequest
1 голос
/ 24 апреля 2020

Так что мне нужно получить последнюю часть URL, например,

https://www.example.com/no-match/match-this-part/
https://www.example.com/no-match/match-this-part-too
https://www.example.com        <- don't match anything
https://www.example.com/       <- don't match anything

Мне нужно, чтобы она игнорировала двойной sla sh и соответствовала любой последней части после sla sh есть (если бы sla sh можно было бы включить было бы неплохо). Второе условие: sla sh не должен быть последним символом (пример 1)

Вот что я пробовал: /\/(?:.(?!\/))+$/

Ответы [ 2 ]

1 голос
/ 24 апреля 2020

Вы можете использовать следующее регулярное выражение.

\bhttps:\/\/[\da-z._~-]+(?:\/[\da-z._~-]+)*(\/[\da-z._~-]+)

Если существует группа захвата совпадений, 1 будет содержать последнюю прямую sla sh, за которой следует остаток URL, при условии, что хотя бы один символ URL следует за последним форвардом sla sh.

Demo

* Механизм регулярных выражений 1014 * выполняет следующие операции.

\b               # match a word break
https:\/\/       # match 'http://'
[\da-z._~-]+     # match 1+ chars in char class
(?:              # begin non-cap grp
  \/             # match '/'
  [\da-z._~-]+   # match 1+ chars in char class
)                # end non-cap grp
*                # execute non-cap grp 0+ times
(                # begin cap grp 1
  \/             # match '/' 
  [\da-z._~-]+   # match 1+ chars in char class
)                # end cap grp 1  
0 голосов
/ 24 апреля 2020

Соответствует начальной части URL, затем перехватывает без слешей, за которыми следует sla sh. Если есть совпадение, извлеките первую группу захвата:

`https://www.example.com/no-match/match-this-part/
https://www.example.com/no-match/match-this-part-too
https://www.example.com
https://www.example.com/`
  .split('\n')
  .forEach((str) => {
    const match = str.match(/https?:\/\/[^/]+\/.*?([^/]+)\/?$/);
    if (match) {
      console.log(match[1]);
    }
  });

https?:\/\/[^/]+\/.*?([^/]+)\/?$ означает:

  • https?:\/\/[^/]+\/ - сопоставить начало URL-адреса вплоть до первого sla sh, например http://foo.bar/ или https://foo.bar/
  • .*? - сопоставить любой символ до , вы можете:
  • ([^/]+)\/?$ - сопоставить и захватить не косые черты, возможно, после которых следует sla sh, за которым следует конец строки

Если вы хотите разрешить сопоставление любого произвольного протокола, используйте [^:]+ вместо https?.

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