過濾器允許你修改 [[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"` 回傳 `![alt text](image.jpg)`。 - 陣列:`["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}]`。 - 物件會移除具有重複值的屬性,保留最後出現的鍵。 - 字串則回傳輸入值不變。