Искать слова, кроме определённых

Например, я хочу найти/подсчитать в ноутпаде все слова, кроме собак.

\w+([^(dog)]|[^(dogs)])

Как между 2 выражениями поставить И?

Решение:

\b(\w+)\b(?<!dog)\b(?<!dogs)

Ответы (2 шт):

Автор решения: mepihindeveloper

Вот такое регулярное выражение надо использовать: \b([a-z0-9]+)\b(?<!dog|dogs). Объяснение:

  1. \b - границы слов
  2. (...) - группа
  3. [a-z0-9] - допустимые символы
  4. + - один или несколько символов
  5. (?<!...) - гарантирует, что данный шаблон не будет совпадать и заканчиваться на текущей позиции в выражении
  6. dog|dogs - исключающие слова, где | - или
→ Ссылка
Автор решения: Wiktor Stribiżew

Используйте границы слов и блок предварительного просмотра вперёд:

\b(?!(?:dog|dogs)\b)\w+

См. пример использования регулярного выражения.

Подробности

  • \b - граница слова
  • (?! - начало блока предварительного просмотра
    • (?:dog|dogs) - либо dog, либо dogs
    • \b - граница слова
  • ) - конец блока предварительного просмотра
  • \w+ - один и более буквоцифровых символов или символов нижнего подчёркиания.

В JavaScript границу слова можно заменить на (?<!\p{Alphabetic}\p{Mark}*|[\p{Decimal_Number}\p{Connector_Punctuation}\p{Join_Control}]) / (?![\p{Alphabetic}\p{Decimal_Number}\p{Connector_Punctuation}\p{Join_Control}]):

/(?<!\p{Alphabetic}\p{Mark}*|[\p{Decimal_Number}\p{Connector_Punctuation}\p{Join_Control}])(?!(?:собака|пёс)(?![\p{Alphabetic}\p{Decimal_Number}\p{Connector_Punctuation}\p{Join_Control}]))[\p{Alphabetic}\p{Mark}\p{Decimal_Number}\p{Connector_Punctuation}\p{Join_Control}]+/gu

Конечно, всё это лучше записатьв виде переменных:

const lwb = String.raw`(?<!\p{Alphabetic}\p{Mark}*|[\p{Decimal_Number}\p{Connector_Punctuation}\p{Join_Control}])`;
const rwb = String.raw`(?![\p{Alphabetic}\p{Decimal_Number}\p{Connector_Punctuation}\p{Join_Control}])`;
const uw = String.raw`[\p{Alphabetic}\p{Mark}\p{Decimal_Number}\p{Connector_Punctuation}\p{Join_Control}]`;
const exceptions = ['собака', 'пёс'];
const regex = new RegExp(`${lwb}(?!(?:${exceptions.join('|')})${rwb})${uw}+`, "gui");
console.log('Собака, пёс, кот и горилла'.match(regex));

→ Ссылка