過濾器允許你修改 [[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`
將文字轉換為`小寫`。
### `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`(sticky)。
### `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`
將字串、陣列或物件轉換為 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 元素及其內容。
- 支援標籤名稱、class 或 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`
使用 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}]`。
- 物件會移除具有重複值的屬性,保留最後出現的鍵。
- 字串則回傳輸入值不變。