Фильтры позволяют изменять [[Переменные|переменные]] в [[Obsidian Web Clipper/Шаблоны|шаблонах Web Clipper]]. Фильтры применяются к переменным с помощью синтаксиса `{{variable|filter}}`.
- Фильтры работают с любыми типами [[Переменные|переменных]], включая переменные `prompt`, `meta`, `selector` и `schema`.
- Фильтры можно объединять в цепочки, например `{{variable|filter1|filter2}}`, и они применяются в порядке добавления.
## Даты
Преобразование и изменение дат.
### `date`
Преобразует дату в указанный формат, [см. справку](https://day.js.org/docs/en/display/format).
- `{{date|date:"YYYY-MM-DD"}}` преобразует текущую дату в формат "YYYY-MM-DD".
- Используйте `date:("outputFormat", "inputFormat")` для указания входного формата, например `"12/01/2024"|date:("YYYY-MM-DD", "MM/DD/YYYY")` разбирает "12/01/2024" и возвращает `"2024-12-01"`.
### `date_modify`
Изменяет дату, добавляя или вычитая указанное количество времени, [см. справку](https://day.js.org/docs/en/manipulate/add).
- `"2024-12-01"|date_modify:"+1 year"` возвращает `"2025-12-01"`
- `"2024-12-01"|date_modify:"- 2 months"` возвращает `"2024-10-01"`
### `duration`
Преобразует строки длительности в формате ISO 8601 или секунды в форматированные строки времени. Использует токены: `HH` (часы с ведущим нулём), `H` (часы), `mm` (минуты с ведущим нулём), `m` (минуты), `ss` (секунды с ведущим нулём), `s` (секунды).
- `"PT1H30M"|duration:"HH:mm:ss"` возвращает `"01:30:00"`.
- `"3665"|duration:"H:mm:ss"` возвращает `"1:01:05"`.
- При использовании `duration` без параметров применяется формат `HH:mm:ss` для значений более 1 часа и `mm:ss` для значений менее 1 часа.
- Поддерживаются как строки длительности ISO 8601 (например, `PT6702S`, `PT1H30M`), так и простые секунды.
## Преобразование и регистр текста
Преобразование текстовых строк из одного формата в другой.
### `camel`
Преобразует текст в `camelCase`.
### `capitalize`
Делает первый символ заглавным, а остальные преобразует в нижний регистр, например `"hELLO wORLD"|capitalize` возвращает `"Hello world"`.
### `decode_uri`
Декодирует строку, закодированную в формате URI, например `"%E4%BD%A0%E5%A5%BD"|decode_uri` возвращает `"你好"`.
- `"hello%20world"|decode_uri` возвращает `"hello world"`.
- Возвращает исходную строку, если декодирование не удалось (например, при некорректных URI-последовательностях).
### `kebab`
Преобразует текст в `kebab-case`.
### `lower`
Преобразует текст в `нижний регистр`.
### `pascal`
Преобразует текст в `PascalCase`.
### `replace`
Заменяет вхождения указанного текста:
- Простая замена: `"hello!"|replace:",":""` удаляет все запятые.
- Множественная замена: `"hello world"|replace:("e":"a","o":"0")` возвращает `"hall0 w0rld"`.
- Замены применяются в порядке их указания.
- Для удаления указанного текста используйте `""` в качестве значения замены.
- Специальные символы, включая `: | { } ( ) ' "`, должны быть экранированы обратной косой чертой при использовании в поисковом запросе, например `\:` для поиска буквального двоеточия.
Поддерживаются регулярные выражения с использованием синтаксиса JavaScript:
- Замена всех гласных: `"hello world"|replace:"/[aeiou]/g":"*"` → `"h*ll* w*rld".`
- Без учёта регистра: `"HELLO world"|replace:"/hello/i":"hi"` → `"hi world".`
- Множественные регулярные выражения: `"hello world"|replace:("/[aeiou]/g":"*","/\s+/":"-")` → `"h*ll*-w*rld"`.
- Доступные флаги: `g` (глобальный), `i` (без учёта регистра), `m` (многострочный), `s` (dotAll), `u` (юникод), `y` (привязка).
### `safe_name`
Преобразует текст в безопасное имя файла.
- По умолчанию `safe_name` применяет наиболее консервативные правила очистки.
- Правила для конкретной ОС можно применить с помощью `safe_name:os`, где `os` может быть `windows`, `mac` или `linux`, чтобы применить правила только для данной операционной системы.
### `snake`
Преобразует текст в `snake_case`.
### `title`
Преобразует текст в `Title Case`, например `"hello world"|title` возвращает `"Hello World"`.
### `trim`
Удаляет пробелы с обоих концов строки.
- `" hello world "|trim` возвращает `"hello world"`.
### `uncamel`
Преобразует camelCase или PascalCase в слова, разделённые пробелами, которые затем можно дополнительно отформатировать другими фильтрами, например `title` или `capitalize`.
- `"camelCase"|uncamel` возвращает `"camel case"`.
- `"PascalCase"|uncamel` возвращает `"pascal case"`.
### `upper`
Преобразует значение в верхний регистр, например `"hello world"|upper` возвращает `"HELLO WORLD"`.
## Форматирование текста
Применение [[Основной синтаксис форматирования|основного]] и [[Расширенный синтаксис форматирования|расширенного синтаксиса форматирования]] к тексту.
### `blockquote`
Добавляет префикс цитаты Markdown (`> `) к каждой строке входных данных.
### `callout`
Создаёт [[Выноски|выноску]] с необязательными параметрами: `{{variable|callout:("type", "title", foldState)}}`
- `type` — тип выноски, по умолчанию "info"
- `title` — заголовок выноски, по умолчанию пустой
- `foldState` — булево значение для состояния сворачивания (true — свёрнуто, false — развёрнуто, null — без возможности сворачивания)
### `footnote`
Преобразует массив или объект в список сносок Markdown.
- Для массивов: `["first item","second item"]|footnote` возвращает: `[^1]: first item` и т.д.
- Для объектов: `{"First Note": "Content 1", "Second Note": "Content 2"}|footnote` возвращает: `[^first-note]: Content 1` и т.д.
### `fragment_link`
Преобразует строки и массивы в ссылки на [текстовые фрагменты](https://developer.mozilla.org/en-US/docs/Web/URI/Fragment/Text_fragments). По умолчанию текстом ссылки является "link".
- `highlights|fragment_link` возвращает `Highlight content [link](text-fragment-url)`
- `highlights|fragment_link:"custom title"` возвращает `Highlight content [custom title](text-fragment-url)`
### `image`
Преобразует строки, массивы или объекты в синтаксис изображений Markdown.
- Для строк: `"image.jpg"|image:"alt text"` возвращает ``.
- Для массивов: `["image1.jpg","image2.jpg"]|image:"alt text"` возвращает массив строк изображений Markdown с одинаковым альтернативным текстом для всех изображений.
- Для объектов: `{"image1.jpg": "Alt 1", "image2.jpg": "Alt 2"}|image` возвращает строки изображений Markdown с альтернативным текстом из ключей объекта.
### `link`
Преобразует строки, массивы или объекты в синтаксис ссылок Markdown (не путать с [[Фильтры#`wikilink`|wikilink]]).
- Для строк: `"url"|link:"author"` возвращает `[author](url)`.
- Для массивов: `["url1","url2"]|link:"author"` возвращает массив ссылок Markdown с одинаковым текстом для всех ссылок.
- Для объектов: `{"url1": "Author 1", "url2": "Author 2"}|link` возвращает ссылки Markdown с текстом, соответствующим ключам объекта.
### `list`
Преобразует массив в список Markdown.
- `list` для преобразования в маркированный список.
- `list:task` для преобразования в список задач.
- `list:numbered` для преобразования в нумерованный список.
- `list:numbered-task` для преобразования в список задач с нумерацией.
### `table`
Преобразует массив или массив объектов в [[Расширенный синтаксис форматирования#Таблицы|таблицу Markdown]]:
- Для массива объектов ключи объекта используются в качестве заголовков.
- Для массива массивов создаётся таблица, где каждый вложенный массив является строкой.
- Для простого массива создаётся таблица с одним столбцом и заголовком "Value".
- Пользовательские заголовки столбцов можно указать с помощью: `table:("Column 1", "Column 2", "Column 3")`. При использовании с простым массивом данные автоматически разбиваются на строки в соответствии с указанным количеством столбцов.
### `wikilink`
Преобразует строки, массивы или объекты в синтаксис [[Связывание заметок|wiki-ссылок]] Obsidian.
- Для строк: `"page"|wikilink` возвращает `[[page]]`.
- Для строк с псевдонимом: `"page"|wikilink:"alias"` возвращает `[[page|alias]]`.
- Для массивов: `["page1","page2"]|wikilink` возвращает массив wiki-ссылок без псевдонимов.
- Для массивов с псевдонимом: `["page1","page2"]|wikilink:"alias"` возвращает массив wiki-ссылок с одинаковым псевдонимом для всех ссылок.
- Для объектов: `{"page1": "alias1", "page2": "alias2"}|wikilink` возвращает wiki-ссылки, где ключи являются именами страниц, а значения — псевдонимами.
## Числа
### `calc`
Выполняет базовые арифметические операции с числами.
- Поддерживаемые операторы: `+`, `-`, `*`, `/`, `**` (или `^`) для возведения в степень.
- Пример: `5|calc:"+10"` возвращает `15`.
- Пример: `2|calc:"**3"` возвращает `8` (2 в кубе).
- Возвращает исходную строку, если входные данные не являются числом.
### `length`
Возвращает длину строк, массивов или количество ключей в объектах.
- Для строк: `"hello"|length` возвращает `5`.
- Для массивов: `["a","b","c"]|length` возвращает `3`.
- Для объектов: `{"a":1,"b":2}|length` возвращает `2`.
### `round`
Округляет число до ближайшего целого или до указанного количества знаков после запятой.
- Без параметров: `3.7|round` возвращает `4`.
- С указанием количества знаков: `3.14159|round:2` возвращает `3.14`.
## Обработка HTML
Обработка HTML-содержимого и преобразование HTML в Markdown. Обратите внимание, что входная [[Переменные|переменная]] должна содержать HTML-содержимое, например, с использованием `{{fullHtml}}`, `{{contentHtml}}` или переменной `{{selectorHtml:}}`.
### `markdown`
Преобразует строку в формат [[Obsidian Flavored Markdown]].
- Полезен в сочетании с переменными, возвращающими HTML, такими как `{{contentHtml}}`, `{{fullHtml}}` и переменные-селекторы вроде `{{selectorHtml:cssSelector}}`.
### `remove_attr`
Удаляет только указанные HTML-атрибуты из тегов.
- Пример: `"<div class="test" id="example">Content</div>"|remove_attr:"class"` возвращает `<div id="example">Content</div>`.
- Несколько атрибутов: `{{fullHtml|remove_attr:("class,style,id")}}`
### `remove_html`
Удаляет указанные HTML-элементы и их содержимое из строки.
- Поддерживает имя тега, класс или id, например `{{fullHtml|remove_html:("img,.class-name,#element-id")}}`
- Для удаления только HTML-тегов или атрибутов без удаления содержимого используйте фильтры `strip_tags` или `strip_attr`.
### `remove_tags`
Удаляет только указанные HTML-теги. Содержимое тегов сохраняется.
- Пример: `"<p>Hello <b>world</b>!</p>"|remove_tags:"b"` возвращает `"<p>Hello world!</p>"`.
- Несколько тегов: `{{fullHtml|remove_tags:("a,em,strong")}}`
### `replace_tags`
Заменяет HTML-теги, сохраняя содержимое и атрибуты тега.
- `{{fullHtml|replace_tags:"strong":"h2"}}` заменяет все теги `<strong>` на `<h2>`.
### `strip_attr`
Удаляет **все** HTML-атрибуты из строки.
- Используйте `strip_attr:("class, id")`, чтобы сохранить определённые атрибуты.
- Пример: `"<div class="test" id="example">Content</div>"|strip_attr:("class")` возвращает `<div id="example">Content</div>`.
### `strip_md`
Удаляет **всё** форматирование Markdown и возвращает строку в виде обычного текста, например преобразуя `**text**` в `text`.
- Превращает форматированный текст в неформатированный обычный текст, включая жирный, курсив, выделение, заголовки, код, блочные цитаты, таблицы, списки задач и wiki-ссылки.
- Полностью удаляет таблицы, сноски, изображения и HTML-элементы.
### `strip_tags`
Удаляет **все** HTML-теги из строки. Содержимое внутри тегов сохраняется.
- Используйте `strip_tags:("p,strong,em")`, чтобы сохранить определённые теги.
- Пример: `"<p>Hello <b>world</b>!</p>"|strip_tags:("b")` возвращает `Hello <b>world</b>!`.
## Массивы и объекты
Обработка массивов и объектов.
### `first`
Возвращает первый элемент массива в виде строки.
- `["a","b","c"]|first` возвращает `"a"`.
- Если входные данные не являются массивом, возвращает их без изменений.
### `join`
Объединяет элементы массива в строку.
- `["a","b","c"]|join` возвращает `"a,b,c"`.
- Можно указать пользовательский разделитель: `["a","b","c"]|join:" "` возвращает `"a b c"`. Используйте `join:"\n"`, чтобы разделить элементы переносом строки.
- Полезен после `split` или `slice`: `"a,b,c,d"|split:","|slice:1,3|join:" "` возвращает `"b c"`.
### `last`
Возвращает последний элемент массива в виде строки.
- `["a","b","c"]|last` возвращает `"c"`.
- Если входные данные не являются массивом, возвращает их без изменений.
### `map`
Применяет преобразование к каждому элементу массива с использованием синтаксиса `map:item => item.property` или `map:item => item.nested.property` для вложенных свойств.
- `[{gem: "obsidian", color: "black"}, {gem: "amethyst", color: "purple"}]|map:item => item.gem` возвращает `["obsidian", "amethyst"]`.
- Используйте скобки для объектных литералов и сложных выражений: `map:item => ({key: value})`, например: `[{gem: "obsidian", color: "black"}, {gem: "amethyst", color: "purple"}]|map:item => ({name: item.gem, color: item.color})` возвращает `[{name: "obsidian", color: "black"}, {name: "amethyst", color: "purple"}]`.
Также поддерживаются строковые литералы, например `["rock", "pop"]|map:item => "genres/${item}"` возвращает `["genres/rock", "genres/pop"]`.
Комбинируйте `map` с фильтром `template`, например `map:item => ({name: ${item.gem}, color: item.color})|template:"- ${name} is ${color}\n"`. Для строковых литералов в map используйте `${str}` в шаблоне, например `["rock", "pop"]|map:item => "genres/${item}"|template:"- ${str}"`.
Примечание: встроенные фильтры нельзя использовать внутри `map`. Это означает, что, например, обрезку каждого значения массива нельзя выполнить с помощью `map`.
### `merge`
Добавляет новые значения в массив.
- Для массивов: `["a","b"]|merge:("c","d")` возвращает `["a","b","c","d"]`.
- Одно значение: `["a","b"]|merge:"c"` возвращает `["a","b","c"]`.
- Если входные данные не являются массивом, создаётся новый массив: `"a"|merge:("b","c")` возвращает `["a","b","c"]`.
- Значения можно заключать в кавычки: `["a"]|merge:('b,"c,d",e')` возвращает `["a","b","c,d","e"]`.
### `nth`
Сохраняет каждый n-й элемент массива, используя синтаксис в стиле CSS nth-child и групповые шаблоны. Все позиции начинаются с 1 (первый элемент — позиция 1).
- `array|nth:3` сохраняет только 3-й элемент.
- `array|nth:3n` сохраняет каждый 3-й элемент (3, 6, 9 и т.д.).
- `array|nth:n+3` сохраняет 3-й и все последующие элементы.
Синтаксис групповых шаблонов для повторяющихся структур:
- `array|nth:1,2,3:5` сохраняет позиции 1, 2, 3 из каждой группы по 5 элементов. Пример: `[1,2,3,4,5,6,7,8,9,10]|nth:1,2,3:5` возвращает `[1,2,3,6,7,8]`.
### `object`
Управляет данными объектов:
- `object:array` преобразует объект в массив пар ключ-значение.
- `object:keys` возвращает массив ключей объекта.
- `object:values` возвращает массив значений объекта.
- Пример: `{"a":1,"b":2}|object:array` возвращает `[["a",1],["b",2]]`.
### `slice`
Извлекает часть строки или массива.
- Для строк: `"hello"|slice:1,4` возвращает `"ell"`.
- Для массивов: `["a","b","c","d"]|slice:1,3` возвращает `["b","c"]`.
- Если указан только один параметр, извлечение выполняется от этого индекса до конца: `"hello"|slice:2` возвращает `"llo"`.
- Отрицательные индексы отсчитываются с конца: `"hello"|slice:-3` возвращает `"llo"`.
- Второй параметр является исключающим: `"hello"|slice:1,4` включает символы с индексами 1, 2 и 3.
- Отрицательный второй параметр исключает элементы с конца: `"hello"|slice:0,-2` возвращает `"hel"`.
### `split`
Разделяет строку на массив подстрок.
- `"a,b,c"|split:","` возвращает `["a","b","c"]`.
- `"hello world"|split:" "` возвращает `["hello","world"]`.
- Если разделитель не указан, строка разбивается по каждому символу: `"hello"|split` возвращает `["h","e","l","l","o"]`.
- В качестве разделителей можно использовать регулярные выражения: `"a1b2c3"|split:[0-9]` возвращает `["a","b","c"]`.
### `template`
Применяет строку шаблона к объекту или массиву объектов с использованием синтаксиса `object|template:"Template with ${variable}"`.
- Доступ к вложенным свойствам: `{"gem":{"name":"Obsidian"}}|template:"${gem.name}"` возвращает `"Obsidian"`.
- Для объектов: `{"gem":"obsidian","hardness":5}|template:"${gem} has a hardness of ${hardness}"` возвращает `"obsidian has a hardness of 5"`.
- Для массивов: `[{"gem":"obsidian","hardness":5},{"gem":"amethyst","hardness":7}]|template:"- ${gem} has a hardness of ${hardness}\n"` возвращает форматированный список.
Работает со строковыми литералами из `map` с использованием `${str}`:
- Пример: `["rock", "pop"]|map:item => "genres/${item}"|template:"- ${str}"` возвращает форматированный список.
### `unique`
Удаляет дублирующиеся значения из массивов и объектов.
- Для массивов примитивов: `[1,2,2,3,3]|unique` возвращает `[1,2,3]`.
- Для массивов объектов: `[{"a":1},{"b":2},{"a":1}]|unique` возвращает `[{"a":1},{"b":2}]`.
- Для объектов удаляет свойства с дублирующимися значениями, сохраняя ключ последнего вхождения.
- Для строк возвращает входные данные без изменений.