регулярное выражение для соответствия URL - PullRequest
0 голосов
/ 16 июня 2019

У меня есть два вида URL:

http://somedomain/somepath/DP/vk3103s3/ref/somepath
http://somedomain/somepath/DP/vk3103s3

и попробуйте найти путь между '/ DP /' до '/ ref' или до конца URL-адреса (если в URL-адресе отсутствует / ref). в приведенном выше примере URL должен возвращать строку vk3103s3.

и я пытаюсь использовать регулярные выражения, такие как: new RegExp ('/ dp /(.*)(?:/ ad | \ $)', 'i');
это не работает может кто-нибудь помочь получить это и сказать, почему ...

1 Ответ

0 голосов
/ 16 июня 2019

После /DP/ соответствует чему-либо, кроме косой черты:

[
  'http://somedomain/somepath/DP/vk3103s3/ref/somepath',
  'http://somedomain/somepath/DP/vk3103s3'
].forEach(str => {
  console.log(
    str.match(/\/dp\/([^/]+)/i)[1]
  );
});

(также не используйте new RegExp, если вам не нужно динамически создавать шаблон из переменной - вам придется дважды экранировать \ s. Лучше использовать обычный выражение буквальное)

Если между DP и /ref может быть несколько разделенных / разделов URL, то аналогично тому, что вы делаете сейчас, lazy-repeat и lookahead для \/ref|$. Не используйте \$, потому что это будет соответствовать литерал $ символ , а не конец строки:

[
  'http://somedomain/somepath/DP/vk3103s3/ref/somepath',
  'http://somedomain/somepath/DP/vk3103s3',
  'http://somedomain/somepath/DP/vk3103s3/somethingElse/ref/somepath'
].forEach(str => {
  console.log(
    str.match(/\/dp\/(.*?)(?=\/ref|$)/mi)[1]
  );
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...