import {Meta} from '@storybook/addon-docs/blocks'

<Meta title='@dxtmisha/ru/functional-basic/Classes/SearchListMatcher - Логика Сопоставления Поиска'/>

# Класс SearchListMatcher

Класс `SearchListMatcher` отвечает за основную логику сопоставления. Он преобразует текущую строку поиска в регулярное выражение и предоставляет методы для проверки соответствия различных значений данных этому выражению.

## Ключевые особенности

- **Динамическая генерация RegExp** — автоматически создает или сбрасывает сопоставитель при изменении поискового запроса или опций.
- **Режимы поиска** — поддерживает как стандартный частичный поиск, так и режим точного совпадения на основе `SearchListOptions`.
- **Эффективная проверка** — использует высокопроизводительные методы регулярных выражений для поиска совпадений в данных.

## Инициализация

Для инициализации объекта вызовите конструктор `SearchListMatcher(item, options)`.

**Параметры:**
- `item: SearchListItem` — состояние элемента поиска, содержащее значение.
- `options: SearchListOptions` — параметры конфигурации (например, `findExactMatch`).

```typescript
import { SearchListMatcher, SearchListItem, SearchListOptions } from '@dxtmisha/functional-basic'

const options = new SearchListOptions({ findExactMatch: false })
const item = new SearchListItem('admin', options)
const matcher = new SearchListMatcher(item, options)

console.log(matcher.isSelection('System Administrator')) // true
```

## Методы

### Информационные

- `is(): boolean` — Проверяет, инициализировано ли внутреннее регулярное выражение.
- `isSelection(value: string): boolean` — Проверяет, соответствует ли данное значение текущему поисковому выражению.
- `get(): RegExp | undefined` — Возвращает текущий экземпляр регулярного выражения.

### Управление

- `update(): void` — Переинициализирует сопоставитель на основе текущего состояния элемента поиска и опций.

## Режимы поиска

Класс поддерживает два основных режима сопоставления, которые управляются опцией `findExactMatch` в `SearchListOptions`:

### 1. Содержит все слова (По умолчанию)
Когда `findExactMatch` установлено в `false`, строка поиска разбивается на отдельные слова. Совпадение считается найденным только если **каждое слово** присутствует в целевой строке, независимо от их порядка.
- **Пример**: Поиск `"игровая мышь"` найдет и `"Мышь игровая"`, и `"Игровая профессиональная мышь"`.

### 2. Точная фраза
Когда `findExactMatch` установлено в `true`, строка поиска рассматривается как единая непрерывная фраза. Совпадение считается найденным только если **точная последовательность** символов (без учета регистра) присутствует в целевой строке.
- **Пример**: Поиск `"игровая мышь"` найдет `"Классная игровая мышь"`, но **не найдет** `"Мышь для игровой приставки"`.
