Regex для сопоставления подпапки внутри домена - PullRequest
0 голосов
/ 10 января 2020

В настоящее время я использую \/[^\.]+$ для сопоставления подпапок в URL.

Мне интересно, как я могу изменить его, чтобы он соответствовал только подстроке подпапки.

В настоящее время он распознает протокол http: // и https: //, но я не хочу, чтобы это совпадало.

demo: https://regex101.com/r/nG7kM9/12

пример:

thisisatest.com => no match
https://thisiatest.com/ => no match
http://thisiatest.com/folder/folder2/ => /folder/folder2/ match
http://thisisatest.com/folder => /folder match
https:// => https:// match ( but don't want this to match )
http:// => http:// match ( but don't want this to match )

Ответы [ 2 ]

1 голос
/ 10 января 2020

Попробуйте:

(?<!\/)\/[^\/\.][^\.:]*$
  • (?<!\/)\/: соответствует /, но не соответствует //
  • [^\/\.]: не соответствует . как хотите, не сопоставляйте / после символа /
  • [^\.:]*: не сопоставляйте . так, как хотите, не сопоставляйте :

Примечание : вы не хотите, чтобы совпадение ., но я думаю, что это может привести к ошибке с URL-адресом ., можете ли вы добавить все случаи, которые хотите? Я изменяю регулярное выражение, чтобы помочь вам

0 голосов
/ 10 января 2020

Сначала вы можете сопоставить протокол http с необязательными s и ://

Затем использовать класс отрицательных символов [^\/\r\n]+ для сопоставления с любым символом, кроме /

В захвате группа соответствует прямому sla sh, за которым следует сопоставление любого символа, кроме новой строки 1+ раз (\/.+), чтобы предотвратить совпадение одиночного sla sh в конце.

Значение находится в первой группе захвата

^https?:\/\/[^\/\r\n]+(\/.+)$

Regex demo

const regex = /^https?:\/\/[^\/\r\n]+(\/.+)$/gm;
const str = `thisisatest.com
https://thisiatest.com/
http://thisiatest.com/folder/folder2/
http://thisisatest.com/folder
https://
http://
`;
let m;

while ((m = regex.exec(str)) !== null) {
  // This is necessary to avoid infinite loops with zero-width matches
  if (m.index === regex.lastIndex) {
    regex.lastIndex++;
  }

  console.log(m[1]);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...