Regex: исключая субдомен URL - PullRequest
       5

Regex: исключая субдомен URL

0 голосов
/ 05 октября 2019

Я бы хотел использовать Regex для сортировки URL. Более того, у меня есть домен, который я хочу исключить. Я хочу сохранить все домены, принадлежащие www.test.com (вымышленный пример), за исключением: www.test.com / ..., www.abc.test.com / ..., www.def.test.com/...

Интересующий меня веб-сайт имеет много других поддоменов, таких как www.ghi.test.com, www.jkl.test.com, www.a.test.com ...

Я пытался использовать отрицательный поиск, но мне трудно найти выражение, которым я доволен.

Также мне интересно узнать, могу ли я просто дать список поддоменови создайте выражение регулярного выражения, адаптированное к моему случаю, например ['www', 'abc', 'def']. Было бы намного проще добавить исключения

Спасибо!

Ответы [ 2 ]

1 голос
/ 05 октября 2019

Конечно: (?!www.(?:abc|def).test.com)(?=www.*\.test\..*com)^.+$

При этом используется отрицательный прогноз, чтобы утверждать, что совпадение, которое вы в конечном итоге получите, НЕ включает ни один из поддоменов, который вам не нужен, и включает в себя положительный прогноз, чтобы убедиться, что мы 'повторное сопоставление www.test.com (в некоторой форме).

  • (?!www.(?:abc|def).test.com) утверждает, что abc или def не появляются в URL. Вы можете добавить в этот список столько, сколько захотите.
  • (?=www.*\.test\..*com) утверждает, что где-то между www и com, .test. появляется.
  • ^.+$ захватлюбые линии ненулевой длины, которые проходят оба заглядывания.

Попробуйте здесь!

0 голосов
/ 05 октября 2019

Вы хотите сказать, что вы действительно хотите классифицировать все *.test.com субдомены как принадлежащие test.com?

Если это так, вы можете использовать вариант: Получить расширение домена от имени хоста

function getDomain(domain) {
  const domainExpression = /\w+((\.[a-z]{2,3})(\.(ad|ae|af|ag|ai|al|am|ao|aq|ar|as|at|au|aw|ax|az|ba|bb|bd|be|bf|bg|bh|bi|bj|bl|bm|bn|bo|bq|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|cr|cu|cv|cw|cx|cy|cz|de|dj|dk|dm|do|dz|ec|ee|eg|er|es|et|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gg|gh|gi|gl|gm|gn|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|in|io|iq|ir|is|it|je|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|me|mf|mg|mh|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|mv|mw|mx|my|mz|na|nc|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|ps|pt|pw|py|qa|re|ro|rs|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|ss|st|sv|sx|sy|sz|tc|td|tf|tg|th|tj|tk|tl|tm|tn|to|tr|tt|tv|tw|tz|ua|ug|uk|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|za|zm|zw))?)$/i;
  const match = domainExpression.exec(domain);
  
  return match ? match[0] : domain;
}

function test(input, expectedOutput) {
  const output = getDomain(input);
  console.log(`${output === expectedOutput ? 'PASS' : 'FAIL'}: ${input} (expected: ${expectedOutput}, output: ${output})`);
}

test('www.test.com', 'test.com');
test('www.abc.test.com', 'test.com');
test('www.jjj.sss.test.com', 'test.com');
test('www.test.com.au', 'test.com.au');
test('www.sub.test.com.au', 'test.com.au');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...