RegEx-Stylish — Исключение некоторых страниц

Я пытаюсь использовать регулярное выражение в аддоне Stylish для браузеров, чтобы соответствовать веб-сайту.

Это регулярное выражение должно соответствовать одному домену (мы назовем его website.com)

И вот как это должно работать:

  • разрешен любой субдомен
  • http или https тоже
  • веб-сайт.com/team* => не разрешено
  • веб-сайт.com/forum* => не разрешено
  • сайт.com* => разрешено

Это буквально означает, что он должен работать для любых страниц веб-сайта, но любые ссылки с /team или /forum сразу после .com не работают.

я пробовал это

((\w+)*\.\w{2,6})(/)(?!team|forum)([^\s]+)

Но это не работает, и я не знаю, как сделать, чтобы он соответствовал только домену website.com

Еще один вопрос, подходят ли такие регулярные выражения для Stylish? в гугле ничего не нашел по этому поводу

Попробуйте так \b(?:https?://)?(?:www\.)?.*?\.com(?!/(?:team|forum))\S*демо

The fourth bird 07.04.2019 11:05
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
1
647
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

\w{2,6} не соответствует website, потому что содержит 7 символов. Класс символов в конце ([^\s]+, который будет соответствовать не пробельному символу, может использовать квантификатор 0+ раз, используя *, чтобы также соответствовать, когда нет косой черты в конце.

Если вы хотите сопоставить веб-сайт.com, вы также можете сопоставить часть .com, иначе [^\s]* будет соответствовать остальной части URL.

Косая черта должна быть частью отрицательного просмотра вперед, поскольку это строка, которую вы не хотите располагать прямо справа.

Ваш шаблон может выглядеть так:

\b(?:https?://)?(?:\w+\.)*website\.com(?!/team|/forum)\S*

Это будет соответствовать

  • \b(?:https?://)? Граница слова, за которой следует необязательный http(s)://
  • (?:\w+\.)* Совпадение 0+ раз 1+ символов слова, за которыми следует точка
  • website\.com Совпадение на сайте.com
  • (?!/team|/forum) Отрицательный взгляд вперед, чтобы утверждать, что то, что находится прямо справа, не является /командой или /форумом
  • \S* Совпадение 0+ раз с непробельным символом

Демонстрация регулярных выражений

Хорошо, кажется, работает, но это странно из-за субдоменов. Как заставить его работать только для одного домена? Это демонстрация регулярного выражения со ссылками, которые у меня есть: regex101.com/r/tA0sV0/38

Pierrou 07.04.2019 11:36

@Pierrou Ты имеешь в виду вот так? regex101.com/r/tA0sV0/39 Прямо сейчас это соответствует www\w*, за которым следует 0+ раз символ слова.

The fourth bird 07.04.2019 11:38

Нет, я имею в виду только домен "website.com", а не все домены. Я использую это регулярное выражение для Stylish (аддон в Chrome для пользовательского CSS). Я не хочу, чтобы мой CSS применялся на любом веб-сайте, на который я захожу;) И, например, если вы поместите что-то еще, кроме www или www2, это не соответствовать больше. Как я уже сказал в своем вопросе, он должен работать на любом поддомене (www, www2, сайт, веб, приложение, ...)

Pierrou 07.04.2019 11:42

Ваш комментарий к вопросу, похоже, хорошо работает для любых поддоменов! Я этого не видел. Но как насчет домена «website.com»?

Pierrou 07.04.2019 11:43

@Pierrou Теперь он будет соответствовать только веб-сайту.com regex101.com/r/RiPq3k/1

The fourth bird 07.04.2019 11:44

Это работает хорошо! Вы знаете, будет ли это регулярное выражение работать в Stylish?

Pierrou 07.04.2019 11:52

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

The fourth bird 07.04.2019 11:58

Проверьте следующее регулярное выражение,

(https?://)?(www.website.com)(/)?(?!team|forum)(\w)*

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

Это регулярное выражение тестируется на следующих тестовых примерах

  1. www.website.com = разрешено
  2. https://www.website.com = разрешено
  3. http://www.website.com = разрешено https://www.website.com/team = запрещено
  4. https://www.website.com/forum = не разрешено
  5. https://www.website.com/samplepage = разрешено

function Test_1(path){
return /^(https|http)(://)(www\.|)((?!website)[\w]*?\.|)website\.com((/)|(/)((?!forum/|team/).*?)|)$/gi.test(path);
}

console.info(Test_1('http://website.com'));
console.info(Test_1('https://www.website.com'));
console.info(Test_1('http://websit.website.com'));
console.info(Test_1('http://websit.website.com/'));
console.info(Test_1('http://websit.website.com/seeg/yukyuk'));

console.info('--------------------------');
console.info('---[Other domain]--------');
console.info('--------------------------');

console.info(Test_1('http://website5.com'));
console.info(Test_1('https://www.website5.com'));
console.info(Test_1('http://websit.website5.com'));
console.info(Test_1('http://websit.website5.com/'));
console.info(Test_1('http://websit.website5.com/seeg/yukyuk'));

console.info('--------------------------');
console.info('---[forum domain]--------');
console.info('--------------------------');

console.info(Test_1('http://website.com/forum'));
console.info(Test_1('http://website.com/forum/'));
console.info(Test_1('http://website.com/forum/rgrg/'));
console.info(Test_1('http://website.com/3forum/rgrg/'));
console.info(Test_1('http://website.com/forum5/rgrg/'));

console.info('--------------------------');
console.info('---[forum subdomain]------');
console.info('--------------------------');

console.info(Test_1('http://websit.website.com/forum'));
console.info(Test_1('http://websit.website.com/forum/'));
console.info(Test_1('http://websit.website.com/forum/rgrg/'));
console.info(Test_1('http://websit.website.com/3forum/rgrg/'));
console.info(Test_1('http://websit.website.com/forum5/rgrg/'));


console.info('--------------------------');
console.info('---[team domain]---------');
console.info('--------------------------');

console.info(Test_1('http://websit.website.com/team'));
console.info(Test_1('http://websit.website.com/team/'));
console.info(Test_1('http://websit.website.com/team/rgrg/'));
console.info(Test_1('http://websit.website.com/3team/rgrg/'));
console.info(Test_1('http://websit.website.com/team5/rgrg/'));


console.info('--------------------------');
console.info('---[team subdomain]-------');
console.info('--------------------------');


console.info(Test_1('http://websit.website.com/team'));
console.info(Test_1('http://websit.website.com/team/'));
console.info(Test_1('http://websit.website.com/team/rgrg/'));
console.info(Test_1('http://websit.website.com/3team/rgrg/'));
console.info(Test_1('http://websit.website.com/team5/rgrg/'));

Другие вопросы по теме