关于Bases中的标签
概述
Bases 中有 tags 标签属性和 file tags 文件内标签,本文分析了两种标签的差异以及如何应用。
两种标签的差异
tags 是更明确的属性内标签,即 Property 中的 tags 这个特定属性;
file tags 是这个笔记内带有的标签,包括属性标签和出现在正文中的标签。
在公式中,仅用 tags 获取的是「属性区的标签属性」,file.tags 获取到的是全文(包括属性区)的标签。

下图可以看出两种标签的区别:
通常来说,笔记内标签数量会大于等于属性内标签。
而过滤器中的 has tag 过滤器(公式中的 file.hasTag() 函数 )匹配的也是 file tags,范围更广。
只想匹配属性内标签的话,应该用 tags.Contains() 函数。
在过滤器中填写时,应该会自动添加上
#前缀。
公式中的标签
file.tags.filter(value != "#task") 才是有效的,即,file.tags 中的字符串均带有 # 前缀,而 tags 则是不带井号前缀的。
在进行交叉匹配时需要考虑到这点。
提取仅出现在正文的标签
使用 filt.tags.filter() 进行过滤,并且用 slice(1) 去掉字符开头的 # 来适配。
完整代码:
file.tags.filter(!tags.contains(value.slice(1)))
如此一来可以获得「未出现在属性内,仅出现在正文」的“提及标签”:
实际应用
例如,我配合 TasksNote 插件,使用单独的「任务笔记」进行任务管理。
为了筛选出“任务笔记”,我需要明确提取带有特定属性 tags: #task 的笔记,但是希望忽略掉那些笔记内带有 #task 这种文章内标签的情况。
这个时候,使用 file.hasTag("task") 就会显示过多无关的结果,需要用 tags.contains("task") 才能精准匹配出“任务笔记”。


