筛选器允许你修改 [[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` 时,超过 1 小时使用 `HH:mm:ss` 格式,不足 1 小时使用 `mm:ss` 格式。
- 同时支持 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`
将文本转换为 `lowercase`(小写)。
### `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`(unicode)、`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 图片字符串数组,所有图片使用相同的 alt 文本。
- 对于对象:`{"image1.jpg": "Alt 1", "image2.jpg": "Alt 2"}|image` 返回使用对象键作为 alt 文本的 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`
将字符串、数组或对象转换为 Obsidian [[链接笔记|Wiki 链接]]语法。
- 对于字符串:`"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 风格的 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"`。对于字符串字面量映射,在模板中使用 `${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`
使用 CSS 风格的 nth-child 语法和分组模式保留数组中的第 n 个元素。所有位置从 1 开始(第一个元素是位置 1)。
- `array|nth:3` 仅保留第 3 个元素。
- `array|nth:3n` 保留每第 3 个元素(3、6、9 等)。
- `array|nth:n+3` 保留第 3 个及之后的所有元素。
分组模式语法,用于重复结构:
- `array|nth:1,2,3:5` 从每组 5 个元素中保留位置 1、2、3 的元素。示例:`[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}]`。
- 对于对象,移除具有重复值的属性,保留最后出现的键。
- 对于字符串,返回原始输入。