Skip to content

自定义捕获词

自定义捕获词用于从文件名中提取额外信息,写入重命名模板变量。它适合保留解析器没有固定字段的内容,例如版本标签、特殊片源标记、剪辑版本、字幕版本、来源组合等。

执行位置:

text
识别词预处理后的标题 -> 自定义捕获词 -> meta.custom_capture / meta._extra_captures -> 重命名模板

默认字段:

jinja
{{ customCapture }}

命名变量:

jinja
{{ editionTag }}
{{ sourceTags }}
{{ cutVersion }}

基本规则

  • 一行一条规则。
  • # 开头为注释。
  • 支持正则表达式。
  • 默认区分大小写。
  • 忽略大小写请使用 (?i)
  • 没有命名变量时,写入默认字段 customCapture
  • 使用 >> 变量名 可写入自定义模板变量。
  • 多个匹配结果会去重后拼接。
  • 默认拼接符是 @

纯正则

只写正则时,匹配文本会写入默认字段 customCapture

text
IMAX
REMUX
Director's Cut

输入:

text
Dune.Part.Two.2024.IMAX.2160p.WEB-DL.mkv

捕获结果:

text
customCapture = IMAX

模板:

jinja
{{ customCapture }}

输出:

text
IMAX

更多示例:

text
(?i)IMAX
(?i)REMUX
(?i)Director'?s[ ._-]?Cut
(?i)Extended[ ._-]?Cut
(?i)Theatrical[ ._-]?Cut

命名捕获

格式:

text
正则 >> 变量名

示例:

text
(?i)(IMAX|REMUX|UHD) >> editionTag
(?i)(Director'?s Cut|Extended Cut|Theatrical Cut) >> cutVersion
(?i)(Atmos|DTS-HD MA|TrueHD) >> audioTag

模板:

jinja
{{ editionTag }}
{{ cutVersion }}
{{ audioTag }}

输入:

text
Dune.Part.Two.2024.IMAX.2160p.TrueHD.Atmos-GROUP.mkv

结果可能是:

text
editionTag = IMAX
audioTag = TrueHD@Atmos

命名变量会注入到重命名模板上下文。变量名建议使用英文字母、数字和下划线,例如:

text
editionTag
sourceTags
cutVersion
animeTag

不要使用已有模板字段名,例如 titleyearreleaseGroup。如果命名变量和已有字段重名,NanShare 不会覆盖已有字段。

条件替换

格式:

text
正则 >> 变量名 => 替换值

匹配成功后,不使用匹配文本,而是写入固定替换值。

示例:

text
(?i)REMUX >> qualityTag => BluRay.REMUX
(?i)WEB[-_. ]?DL >> sourceType => WEB-DL
(?i)BDRip >> sourceType => BluRay

输入:

text
Movie.2024.2160p.REMUX.TrueHD.mkv

结果:

text
qualityTag = BluRay.REMUX

条件替换适合统一不同写法:

text
(?i)IMAX Enhanced >> editionTag => IMAX
(?i)IMAX-?E >> editionTag => IMAX
(?i)Directors? Cut >> cutVersion => Director's Cut
(?i)Extended Edition >> cutVersion => Extended Cut

自定义分隔符

格式:

text
正则 >> 变量名 @分隔符

默认分隔符是 @。如果希望多个匹配值用逗号、点号、短横线拼接,可以指定分隔符。

示例:

text
(?i)(IMAX|REMUX|UHD) >> editionTags @.
(?i)(Atmos|TrueHD|DTS-HD MA) >> audioTags @+
(?i)(Hardsub|CHS|CHT) >> subtitleTags @,

输入:

text
Movie.2024.IMAX.REMUX.TrueHD.Atmos.CHS.mkv

结果:

text
editionTags = IMAX.REMUX
audioTags = TrueHD+Atmos
subtitleTags = CHS

默认字段也可以用多个纯正则累计,默认用 @ 拼接:

text
IMAX
REMUX
Atmos

结果:

text
customCapture = IMAX@REMUX@Atmos

捕获组

如果正则里有捕获组,NanShare 会取第一个非空捕获组作为值。

示例:

text
(?i)(IMAX|REMUX|UHD) >> editionTag

输入:

text
Movie.2024.IMAX.2160p.mkv

结果:

text
editionTag = IMAX

多个捕获组:

text
(?i)(HDR10\+)|(HDR10)|(DV) >> effectTag

命中 HDR10 时会取第一个非空捕获组。

如果不写捕获组,则使用完整匹配文本:

text
(?i)Director'?s[ ._-]?Cut >> cutVersion

多值去重

同一个变量多次命中时,会去重。

text
(?i)(IMAX|REMUX|IMAX) >> editionTag

输入:

text
Movie.IMAX.REMUX.IMAX.mkv

结果:

text
editionTag = IMAX@REMUX

相同文本不会重复追加。

常见用途

版本标签

text
(?i)(IMAX|REMUX|UHD|Criterion) >> editionTag
(?i)(Director'?s Cut|Extended Cut|Theatrical Cut|Unrated) >> cutVersion

模板:

jinja
{{ editionTag }}.{{ cutVersion }}

字幕标签

text
(?i)(CHS|CHT|CHS&CHT|简中|繁中) >> subtitleTag
(?i)(Hardsub|Softsub|内封|外挂) >> subtitleMode

动漫发布标签

text
\[(ANi|Lilith-Raws|NC-Raws|LoliHouse)\] >> animeSource
\[(Baha|CR|WEB-DL)\] >> animePlatform
\[(1080p|2160p)\] >> animePix

特效和音频补充

text
(?i)(DV|DoVi|Dolby Vision) >> effectTag => DV
(?i)(HDR10\+|HDR10|HLG) >> effectTag
(?i)(Atmos|TrueHD|DTS-HD MA|FLAC) >> audioTag

自定义来源标记

webSource 是 NanShare 内置解析字段,不是可手动维护的词表。如果你只是想保留文件名中的特殊来源标记,可以用捕获词写到自己的变量里。

text
(?i)(WEB-DL|WEBRip|BluRay|REMUX) >> sourceTag

模板:

jinja
{{ sourceTag }}

这不会改变内置 webSource 识别逻辑,只是把命中的文本保存到你自定义的 sourceTag

完整配置示例

text
# ===== 默认字段 customCapture =====
(?i)IMAX
(?i)REMUX
(?i)Criterion

# ===== 命名变量:版本 =====
(?i)(IMAX|UHD|REMUX) >> editionTag @.
(?i)(Director'?s Cut|Extended Cut|Theatrical Cut|Unrated) >> cutVersion

# ===== 命名变量:字幕 =====
(?i)(CHS|CHT|CHS&CHT|简中|繁中) >> subtitleTag
(?i)(Hardsub|Softsub|内封|外挂) >> subtitleMode

# ===== 条件替换:统一写法 =====
(?i)IMAX Enhanced >> editionTag => IMAX
(?i)Directors? Cut >> cutVersion => Director's Cut
(?i)WEB[-_. ]?DL >> sourceType => WEB-DL

# ===== 自定义分隔符 =====
(?i)(Atmos|TrueHD|DTS-HD MA|FLAC) >> audioTags @+

模板示例:

jinja
{{title}} ({{year}})/{{en_title}}.{{year}}.{{editionTag}}.{{cutVersion}}.{{sourceType}}.{{audioTags}}-{{releaseGroup}}{{fileExt}}

与制作组的区别

制作组用于识别发布组,写入:

jinja
{{ releaseGroup }}

捕获词用于提取你自定义的额外字段,写入:

jinja
{{ customCapture }}
{{ editionTag }}
{{ cutVersion }}

如果内容本质是压制组或字幕组,优先写到自定义制作组。如果内容是版本、来源、剪辑、字幕模式、特殊标签,优先用捕获词。

与渲染后处理词的区别

捕获词处理的是原始标题中的信息,目标是“提取变量”。

渲染后处理词处理的是最终文件名,目标是“清理结果”。

例如:

text
(?i)IMAX >> editionTag

这是捕获变量。

text
\.{2,} => .

这是清理最终文件名。

校验与排错

后台会校验捕获词正则是否能编译。

常见错误:

text
(IMAX|REMUX >> editionTag

括号未闭合,应该写成:

text
(IMAX|REMUX) >> editionTag

捕获不到时,检查:

  1. 文件名是否经过识别词预处理后改变了。
  2. 正则大小写是否匹配,必要时加 (?i)
  3. >>=> @ 的空格是否正确。
  4. 是否把字段写进模板。
  5. 命名变量是否和已有模板字段重名。

FAQ

只写 IMAX 会写到哪里

写入默认字段 customCapture

text
IMAX

模板中用:

jinja
{{ customCapture }}

>> platform 是不是会改变 webSource

不会。它只是创建一个名为 platform 的自定义模板变量。

一个变量能匹配多个规则吗

可以。同名变量会累计多个命中值,并按分隔符拼接。

text
(?i)IMAX >> tags
(?i)REMUX >> tags

结果:

text
tags = IMAX@REMUX

怎么指定多个值用点号拼接

text
(?i)(IMAX|REMUX|UHD) >> tags @.

结果:

text
IMAX.REMUX

条件替换能不能引用捕获组

当前实现里的 => 替换值 是固定写入值,不做捕获组替换。需要保留匹配文本时,不要写 =>

NanShare 文档站仅说明 NanShare 项目的部署、配置与使用。