#1 - 2024-11-16 17:04
唯独惑
[New] 效果预览图


功能
- 获取条目类型
    - 支持 所有 条目类型,包含5种 subject 类型以及 characterperson 类型;
    - 目前仅 动画 条目有覆盖性较广的默认设置数据;
- 对条目的制作人员信息 infobox 进行职位的排序与折叠
    - 将原本存在的 更多制作人员 一次性按钮改为永久性左右双开关,若不存在则按需添加:
    - [New] 为连续的折叠职位的首 / 尾添加该连续职位的展开按钮 + ,并可显示被折叠职位的名称;
    - [New] 为展开折叠职位添加动画效果;
    - [New] 对新匹配到的职位名称进行记录;
- 对 行数 超过限制的职位人员信息进行二次折叠
    - 将作用于不包含副信息(如 别名 )以外的所有职位信息;
    - 可设置为任意正整数;
    - [New] 可自定义折叠图标相对于职位名称的位置;
- [New] 同时支持关联制作人员页面内的 infobox 排序,此场景中禁用所有的折叠效果
- 可在 设置 - 隐私 界面进行相关自定义设置(仅在同一浏览器内生效)
    - [New] 可选择对历史的匹配记录在设置变更时进行继承;
    - 支持使用正则表达式,对职位名称进行匹配;
    - [New] 支持对正则表达式自定义匹配优先级;
    - 支持将未匹配的职位信息,插入指定位置;
    - [New] 支持将二级职位引导信息,插入指定位置;
    - 对输入文本具备一定的鲁棒性与自我纠错能力;
    - 在部分浏览器中,文本框具备历史完整的 撤销、重做 功能,不会被诸如 保存、恢复默认 等操作阻断

接口
- [New] 提供了一个基于 localStorage共享数据 接口,共享用户当前自定义 / 默认设置的各类型条目的职位顺序,详情说明 #6
- 已联动的组件/脚本:
     - [组件] 音乐条目显示各曲目参与制作人员信息
     - [组件/脚本] 重置人物作品过滤器布局


<<< 设置前可以阅读 格式说明 #2 ,建议参照其中的 标准格式 >>>
欢迎在评论区分享你 调教的设置
也欢迎对已有的默认设置提供修改建议


链接
- 超合金组件    v1.4.5-2.2
- Greasy Fork  v1.4.5-2.2   墙外
- OpenUserJS v1.4.5-2.2   墙内

版本说明
- 版本号前部表示 程序 版本;
- 版本号后部表示 数据 版本;囊括脚本内存储的默认数据、localStorage 内存储的用户数据
- 当前,红色New 表示 v1.4.5 所更新的内容,橙色New 表示 v1.4.0-1.4.4 所更新的内容;
- 更新日志 #3

待开发功能
- 为更多的条目类型添加更加完备的默认设置数据;
- 优化职位信息的折叠效果


兼容性
- 对于书籍、游戏类型条目已实验性地出现了的 sub_group 二级引导页面以及属其所有的 sub_container 子信息进行特殊处理:
     - 禁止 本脚本对其任何方式的折叠与隐藏;
     - 允许 将其视为一个整体进行排序,可以二级引导页面的名称(如平台、版本)为关键字进行匹配,或直接以二级引导页面为目标进行插入匹配,可操作的 案例对象
     - 对其样式做了一定的适配优化;
- 考察了其他修改或读取网页 infobox 信息的脚本:
    - [组件] 获取条目罗马字标题,完全兼容;
    - [组件] 音乐条目显示各曲目参与制作人员信息,完全兼容;
    - [组件] 喂shi警告!staff黑名单+高亮,兼容;
    - [组件] bangumi书籍外链,兼容;
    - [组件] Hyperlink,兼容

相关组件/脚本
- 建议同步开启的组件/脚本:
    - [脚本/组件] 代码高亮 / 一键复制,由于本帖后续说明中存在大量的代码块;
    - [脚本/组件] 折叠Bangumi,由于本贴后续说明中使用了该脚本的内容折叠功能;
    - [组件] 折叠关联条目并展示缩略图,进一步折叠美化条目页面;
- 参考的组件/脚本:
    - [组件] bangumi infobox fold 巧妙地使用非常便捷的方法,获取当前条目的类型;
    - [脚本/组件] 首页与超展开内容屏蔽 参考了其UI的实现;
- 本组件是原作者 nthrkbrk[脚本] 动画条目staff表职位排序  Plus 版,在此声明感谢;真是感叹...究竟是如何从百来行代码变成上千行的

翻到了 Sai 老板近期有关 infobox发言,后续应该会朝着主次折叠、二级页面功能发展,未来只要主体结构不变...本脚本修修改改还是能用的,如果主站最终替代实现了本脚本的功能,那更好啦~
#2 - 2024-11-16 17:05

== 本楼层请回复 ==
求求你了!不然我只能要挪窝了


设置说明 v2025.5.3

跳转至设置界面 设置 - 隐私 - 条目职位排序

[New] 界面预览图


<<< 内容较为冗长繁琐,请按 看不见我 阅读与使用 >>>


一 · 二、职位信息高度限制 · 折叠开关图标的位置

行数 超过限制的职位人员信息进行二次折叠。
- 将作用于所有类型条目;
- 将作用于不包含副信息(如 别名 )以外的所有职位信息;准确地说是除了 sub_group 类别与 sub_container 类别以外的信息
- 可开关,并设置为任意正整数;
- 启用后,可在条目界面点击职位信息首部的三角图标或该职位名称,进行内容的展开 / 折叠;
- [New] 自定义该三角图标相对于职位名称的位置,可选择:隐藏、左、右,示意图见 #8-3
- [New] 不建议设为 1 ,不然可能影响连续的折叠职位的展开按钮的显现。因为当连续的折叠职位的前后元素均被二次折叠时,在其二次折叠未展开的情形下将无法显示该按钮,但不影响通过 更多制作人员 按钮展开。实测当设置大于 1 时,将极大降低此类事件的发生概率;
- 当折叠区域超过视口高度 25% 时,将在展开内容的末尾再提供一个折叠按钮,并为其添加上下文防迷失;
- 下方出现的 折叠 均不是指代职位信息高度限制,而是指被匹配的职位名称的职位信息被整体隐藏。


三、继承历史匹配记录

[New] 将在解析初始化时,对历史匹配记录的职位名称进行继承,并进行预排序。
- 继承数据的来源:来自用户历史浏览条目中的职位匹配记录;
- 继承的触发情景:
    1. 用户执行有效的文本内容 保存
    2. 默认设置的数据版本自动 更新
- 开启后,将提高总体职位排序的速度,并为 共享数据 接口提供更加完备的匹配数据,因此默认开启,也建议开启;
- 在关闭状态下,出现该触发情景,历史匹配记录将被删除;
- 若保持关闭状态,历史匹配记录的生命周期,在继承被触发的前次后次之间;
- 虽为全局配置,但若有需求可以即时性地切换,当作各条目类型的局部配置。


四、各类型条目功能启用状态

控制所在类型条目下的文本内容的功能启用状态。
共有三个挡位:
- 蓝色:启用自定义 / 默认设置的排序与折叠功能;
- 红色:仅启用排序功能,禁用折叠功能;相当于下方文本内容中的所有 true 均失效
- 灰色:禁用设置,但仍可编辑保存,此时将实行网页原有的职位顺序与折叠。相当于下方文本内容中的设置空缺,
- 特殊用法:当文本内容设置空缺,且挡位为红色,此时将实行网页原有的职位顺序,并禁止原有的折叠。(不推荐使用,文本内容设置空缺会导致历史匹配记录被删除)


五、文本内容格式说明

若仅需在 默认设置 的基础上进行 微调,请阅读完毕 非星号* 章节中的 非灰色 内容
再次推荐 [脚本/组件] 折叠Bangumi,由于本贴后续说明中使用了该脚本的内容折叠功能

1. 标准格式
以下将该格式命名为 StaffMapListJSON ,它是以 JSON 格式为基础的。
- 由于设定的数据类型较为复杂,不能通过 split 解析,因此采用了 JSON 格式,由于未使用 对象类型,其实相较简单。但还是不够随心所欲,因此在 2.2 中实现了对 JavaScript 语法的基本兼容;
- 最终在 localStorage 中存储的 StaffMapListJSON 均为规整化后的标准格式 + 2.1.2 中允许的多维数组格式。

StaffMapList 是一个 二维 嵌套数组,同时存储了 职位的顺序折叠的职位 两者的信息。

[spoiler=* 1.1 基本类型]
// 可以是字符串或正则表达式
type MatchJob = string | RegExp | number;
// 以MatchJob为单元的二维嵌套数组,其中子序列的首元素还可以是布尔类型
type StaffMapList = Array<MatchJob | [boolean | MatchJob, ...MatchJob[]]>;;
StaffMapListJSON 就是 StaffMapList 类型的 JSON 格式化字符串。
- string 类型表示职位精确匹配与特殊插入匹配;
- RegExp 类型表示职位正则匹配;
- number 类型表示相关正则匹配的匹配优先级;
- boolean 类型表示相关职位是否被折叠。
[/spoiler]
[spoiler=1.2 职位顺序]
直白地说 StaffMapList 数组内元素的出现顺序,就是其所匹配的职位的顺序。
- 未被匹配的职位们之间,将按原顺序排序;
- sub_group 二级职位引导以及属其所有的 sub_container 子信息将被视为一个整体进行排序,所匹配的关键字为二级职位引导的名称,如平台、版本;
- 被同一个正则表达式所匹配的职位们之间,将按原顺序排序;
- 严格地说,是 StaffMapList 嵌套数组扁平化后的一维数组中元素的顺序。
[/spoiler]
[spoiler=1.3 职位折叠]
所有的职位默认不折叠,当且仅当 StaffMapList 子序列首元素 值为 true 时,使得该子序列内的所有被匹配的职位信息被折叠。例如:
[
  "A", "B", [false, "C"], [false, "D", "E"],
  ["F", true, "G"], true, "H",
  [true, "I", "J"], ["K", "L"]
]
其中,职位顺序就是 A-L 的字母顺序,且只有 IJ 两个职位信息被折叠。想要对 GH 进行折叠的想法未被实现,正确的做法应该是:
[
  "A", "B", [false, "C"], [false, "D", "E"],
  "F", [true, "G"], [true, "H"],
  [true, "I", "J"], ["K", "L"]
]
- 脚本对无效的 true 值不会报错,而是忽略;
- 虽然 false 值表示不折叠,与默认不折叠作用重复,但保留 false 值与其外套的 [ ] 符号可以方便部分场景中进行切换;
- true 值对 sub_group 二级职位引导以及属其所有的 sub_container 子信息的作用无效;
- 对于 2.1.2 规范 StaffMapList 可以是多维嵌套数组,此时当且仅当 true 为数组一级子序列的 最左节点 时,对该子序列内的 所有 元素生效。比如,对于上述例子,可以直接通过下述简单的修改让 A-E 职位被折叠,而不用逐一修改:
[
  [true, "A", "B", [false, "C"], [false, "D", "E"], ],
  "F", [true, "G"], [true, "H"],
  [true, "I", "J"], ["K", "L"]
]

[/spoiler]
[spoiler=1.4 插入未被匹配职位]
可以在 StaffMapList 中的任意位置使用以 ‘==’ 这两个字符 开头 的任意字符串,来指示未被匹配的职位信息的插入指定位置。
- 若无该指示,则默认插入到制作人员信息的 末尾
- 若该指示有重复多个,那么仅最后一个指示有效;
- 非最后一个的指示可以充当内容注释;
- 该指示可以与职位折叠功能相配合,例如:
["A", "B", [true, "==未被匹配的职位=="], "C"]
其中,假设网页中制作人员信息原本的职位顺序为 A C D E,那么脚本执行后顺序为  A D E C ,同时  D E 职位信息将被折叠。
[/spoiler]
[spoiler=* 1.5 插入二级职位引导]
[New] 可以在 StaffMapList 中的任意位置使用以 ‘>>’ 这两个字符 开头 的任意字符串,来指示 sub_group 二级职位引导以及属其所有的 sub_container 子信息的插入指定位置。
- 若无该指示,则对其实行其他类型的匹配;
- 若有该指示,该匹配的 优先级 大于所有其他类型的匹配;
- 该指示无法被 true 值生效;
- 若该指示有重复多个,那么仅最后一个指示有效;
- 若该指示位于 StaffMapList 的末尾,同时没有插入未被匹配职位的指示,未被匹配职位将插入到二级职位引导之前而非末尾;
- 不建议对不包含二级职位引导的条目类型使用该指示,以免降低匹配排序的性能。如果有一天,动画类型条目也使用了二级职位引导我再来优化吧
- 功能诞生由来:
    1. 由于将插入未被匹配职位功能泛化为了插入匹配,想着那不再加点;
    2. 如果仅使用关键字匹配,则无法区分该关键字是存在于普通职位,还是二级职位引导。

[/spoiler]
[spoiler=1.6 默认设置]
首次安装脚本后,将自动启用默认设置的 StaffMapList
在满足格式规范的前提下,可自由对默认设置进行元素与序列的移动插入、删除、添加等修改操作,并保存。
- 对于通过移动插入来微调默认设置的职位顺序,最保险的就是移动默认设置中的 整行 内容、或以 方括号 为单元的内容;
- 如果要 单独 移动某一个元素,尤其是 "/文本/" 形式的元素,若近邻该元素前有 数字 元素,请携同一起进行移动。含义见1.8

- 默认设置状态下,设置将随脚本版本更新而改变,若想回溯先前版本的设置,可至 更新日志 找到对应的版本,并手动复制粘贴修改设置;
- [New] 可在设置界面的右上角观察到当前默认设置的数据版本;
- 若修改设置后希望回到默认设置,可先后按下 恢复默认保存 按键;
- 对于 动画 类型的条目,默认设置具有较广的覆盖性。并覆盖了部分国产动画与早期日本动画条目,目前容易未被匹配的职位主要是一些 日语 名称职位。吐槽下国内职位叫得真乱
[/spoiler]
[spoiler=* 1.7 设置空缺]
文本内容若以 空白 形式保存,则会 关闭 脚本的职位排序与折叠功能,但会保留将原本存在的 更多制作人员 一次性按钮改为永久性开关的功能。用户可以通过这种形式,观察网页原有的职位顺序与折叠的职位。
- [New] 不推荐 使用,文本内容设置空缺会导致历史匹配记录被删除,请 改用 ③中滑动开关置为灰色,达成网页原有的职位顺序与折叠职位的效果;
- 空白 具体是指设置 StaffMapList 保存为长度为零的数组。
[/spoiler]
[spoiler=* 1.8 正则表达式]
StaffMapList 中,职位名称同时支持 string 类型的 精确匹配JavaScript 格式 RegExp 类型的 正则匹配。同时,为了满足 JSON 格式,正则表达式在文本内容中需以 双引号 包裹才能被正确解析。然而这种必须双引号包裹的格式,在 2.2.1 规范下变为了非必须。例如:
[
  "作画监督", "/.*作画.*(监|导)/"
]
其中的正则表达式可以用于匹配机械作画监督、特效作画监督等职位名称。
- [New] 脚本从 1.4.0 版本起,重构了匹配排序的逻辑,使得精确匹配绝对优先于正则匹配,同时降低了正则匹配的开销,使得正则表达式原本的部分使用限制被松解。新的逻辑,将先尝试进行精确匹配,再按序遍历所有的正则式进行正则匹配,并将成功匹配的结果写入缓存,下次可直接用于精确匹配。

[New] 可以为每个正则表达式自定义匹配优先级。优先级为 number 数字类型,数值越小级别越高。优先级需要置于正则表达式之前,才可对该正则表达式作效,且仅能对其作效。同时规定,优先级缺损值为 100。例如:
[
  "/开始|放送|播出/", 90, "/放送星期/", "/(上|公)映/"
]
表示该正则表达式三者的优先级数值为 100, 90, 100,表现为优先级 /放送星期/ > /开始|放送|播出/ > /(上|公)映/
- 当正则表达式优先级数值相同时,顺序靠前的优先级更高;
- 以此将职位顺序与匹配顺序解耦,替代了原先使用否定查找如 x(?!y) 方法所达成的效果,便于维护与扩展,减小了阅读障碍与正则匹配的复杂度。

对正则表达式的使用,提供以下建议:
- 对同一类型的职位作正则匹配时,折叠与次序要求若一致,建议将多个表达式合并为一个,以提高匹配性能;
- [New] 对于过度匹配,只需要防范正则表达式间的匹配冲突,无需再考虑精确匹配;
- [New] 对同一类型的职位,同时使用精确匹配与正则匹配,折叠与次序要求若一致,在不损害语义、不过度匹配的前提下,可以合并为一个正则式,以压缩信息。
[/spoiler]
2. 非标准格式
为了方便内容编写、格式转化,提高用户友好性,提供了非标准格式。

[spoiler=2.1 将被忽略的问题]
以下问题将被忽略,且脚本不会有任何提示。

2.1.1 可省略最外层首尾两端的 ‘[ ]’ 符号
例如以下的文本内容是符合规范的:
"A", [false, "B"], [false, "C", "D"], [], "G", [true, "H", "I"], ["J", "K"]
而无需写为:
[ "A", [false, "B"], [false, "C", "D"], [], "G", [true, "H", "I"], ["J", "K"] ]

* 2.1.2 StaffMapList 可以是多维嵌套数组
但需注意 true 值的有效性与有效区间,详见 1.3。
[/spoiler]
[spoiler=* 2.2 自动纠正的错误]
以下错误将在保存设置时进行自动纠正,并作提示,详细提示仅控制台可见。

2.2.1 将未被引号包裹的正则表达式以双引号包裹
2.2.2 删除序列末尾元素后的 , 逗号
2.2.3 删除序列首位元素前的 , 逗号
2.2.4 删除连续重复的 , 逗号
2.2.5 将半角单引号替换为半角双引号
至此,不通过自定义解析器,而是一种暴力的方法实现了 StaffMapListJSON 对 JavaScript 语法的基本兼容。

2.2.6 将部分全角符号,包含 ‘’“”,、 替换为相应的半角符号

[/spoiler]

===本楼层请勿回复===
#3 - 2024-11-16 17:05

== 本楼层请回复 ==
求求你了!不然我只能要挪窝了


更新日志

建议开启 [脚本/组件] 代码高亮 / 一键复制

程序更新
v1.4.5 2025.05.03
- 新增的功能:
   - 支持关联制作人员页面内的`infobox`排序,此场景中禁用所有的折叠效果
- 优化与修复:
   - 针对移动端,优化更多制作人员按钮被`dock`覆盖下的效果
   - 改用`tooltip`显示被折叠职位的名称
   - 修复`person`场景中仅主页功能生效的问题

v1.4.4 2025.02.12
- 新增的功能:
   - 添加职位名称正则匹配的自定义优先级
   - 添加二次折叠图标相对于职位名称的自定义位置
- 优化与修复:
   - 修复由于重写`console`,导致页面内其他脚本无法正常使用`console.debug`等的问题
   - 优化`jobOrderMap`数据样式,维护其有序性
   - 对正则表达式进行懒加载
   - 优化相关控制台信息的打印
   - 提高对其他修改`infobox`脚本的兼容性

v1.4.3 2024.12.24
- 为连续的折叠职位的首 / 尾添加该连续职位的展开按钮
- 将`更多制作人员`按钮改为左右双开关:
   1. 左开关拥有切换功能,用于常规场景
   2. 右开关不能进行切换,用于辅助连续折叠功能
- 为展开默认折叠职位添加动画效果
- 优先载入默认的`CSS`样式,再在完成解析后修改`CSS`参数

v1.4.2 2024.12.20
- 修复排序折叠功能启用在`allDisable`状态下,错误地导致`jobOrderMap`数据被删除

v1.4.1 2024.12.19
- 添加在`JobOrderMap`初始化时继承历史匹配记录的功能,并可在设置界面开关
- 在设置界面的标题旁,显示当前数据版本
- 修复`StaffMapList`二次初始化时存在的较大缺陷

v1.4.0 2024.12.19
- 重构匹配排序的逻辑,并将`StaffMapList`的解析数据合并匹配记录保存为`JobOrderMap`,
总体降低了数据解析与职位排序的开销,并使得精确匹配绝对优先于正则匹配
- 新增的功能:
    - 删除旧有的异步通信接口,改为其他脚本可以从`localStorage`读取`JobOrderMap`该共享数据并可直接用于`Array.sort()`形式的排序
    - 在插入未被匹配的职位信息功能基础上,添加了插入二级职位引导信息 (即`sub_group`及属其所有的`sub_container`) 的功能,并设为最高优先级
    - 添加数据版本变更后执行相关更新的功能,并按任务优先级执行
    - `JobOrderMap`具备以下情境自动更新的功能:
      1. 默认设置状态下,默认数据的版本发生变更
      2. 条目界面内,获得新的匹配记录
      3. 设置界面内,更改自定义设置或恢复默认设置
- 优化与修复:
    - 使用临时文档片段执行排序结果,一次性更新`DOM`
    - 修复设置界面内,由于配置的键值缓存格式错误导致部分功能异常
    - 删除、更换`localStorage`部分使用的键名

v1.3.2 2024.12.4
- 提供了一个基于`localStorage`的异步通信接口,可以将传入的数据根据用户当前自定义/默认设置进行排序
- 将原本通过在`infobox.li`中内嵌一层`div`的方式来实现不定行数折叠效果,改为借助多层遮罩实现,同时外观不改变
- 优化了排序逻辑,并对其进行抽象与泛化,以支持不同的任务类型

v1.3.1 2024.11.29
- 支持所有类型的条目(但目前只有动画条目有默认数据)
- 优化排序,并进行适当的操作延迟,提高对修改或读取网页`infobox`信息的其他脚本的兼容性
- 针对`sub_group`与`sub_container`类别信息进行了排序兼容与样式优化
- 设置界面可以记忆不同模块的展开状态
- 文本内容编辑增加了对部分全角符号的自动纠错能力

v1.3.0 2024.11.28
- 对大部分功能进行了对象化、解耦与重构,采用对象和类的方式重新设计,具备了扩展其他条目类型的能力
- 新增的功能:
    - 可以自定义职位信息的行数限制,为任意正整数
    - 可以自定义各类型条目功能的启用状态,具备三个挡位
    - 对被二次展开的职位信息,其折叠区域超过一定数值,将在其末尾再提供一个折叠按钮
- 优化与修复:
    - 为尾部的折叠按钮交互添加上下文防迷失
    - 为数据写入操作添加防抖逻辑
    - 使用懒加载的方式载入默认数据
    - 优化设置内的交互控件
    - 为`CSS`样式添加兼容性前缀
    - 修复特殊情况下`更多制作人员`按钮无法显示的问题

v1.2.2 2024.11.24
- 对超过行数限制的职位信息进行折叠(现为固定值4,在随后的版本中可自定义)
- 设置界面文本框在自动纠错后,将通过原位置计算光标出现的适宜位置
- 优化与修复:
    - 修复由于`sub_container`类名丢失造成的`别名`顶部边框被重复显示的问题
    - 将原本的对`#infobox>.li.innerHTML`的修改操作,转为对`DOM`进行移动
    - 严格对`URL`匹配的限制
    - 将所有样式整合为`CSS`数据

v1.2.1 2024.11.16
- 使用更便捷的方法获取当前条目的类型
- 修复一处控制台信息打印的逻辑错误

v1.2.0 2024.11.16 首次上传


数据更新
v2.2 2024.05.04
- 对于`动画条目`,适配更多职位,优化多个职位顺序,主要包含:
    - `别名`相关移动至`中文名`之后
    - `色彩`相关职位移动至`美术`相关职位之后
    - `音响`相关职位移动至`音乐`相关职位之后

v2.1 2024.02.15
- 优化`动画条目`的多个职位顺序

v2.0 2024.02.12
- 对正则匹配使用了自定义优先级,取代原先采用的否定查找法
- 对于`动画条目`,累计测试并归纳了1千余条职位匹配记录,提高了数据覆盖性,细化了分类,部分职位顺序做了调整
- 对于`动画条目`,兼容获取条目罗马字标题组件

v1.5 2024.12.24
- 优化`动画条目`的多个职位顺序
v1.4 2024.12.19
- 根据 v1.4.0 脚本特性,在不损害语义的前提下,压缩了`动画条目`的部分数据,并更改了部分排序
- 对`书籍条目`添加了初步的默认数据,用于演示插入二级职位引导信息的功能
v1.3 2024.12.4
- 对`音乐条目`添加了初步的默认数据
v1.2 2024.11.29
- 对`动画条目`更改了`人物设定`的排序位置
v1.1 2024.11.24
- 对`动画条目`取消`原画`的默认折叠
v1.0 2024.11.16 首次上传

[spoiler=v2.2动画条目]
"===【注释】正则匹配优先级:缺损-100, dd-优先于缺损, 20d-`宣`相关, 30d-`3D`相关, 40d-`设`相关, 50d-`画`相关, 60d-`音`相关, 70d-`色`相关, 80d-`制`相关, 9dd-兜底 ===", 

"中文名", "/^(罗马|拼音|索引)名$/", [ true, "英文名", "别名", "/.+名$/" ],
"类型", "适合年龄", "/国家|地区/", "语言", "对白", "/话数/", [ true, "季数" ], "/(片|时)长/",
"放送开始", "/开始|放送|播出/", 90, "/放送星期/", "放送时间", "/(上|公)映/", "/发售/",

"原作", "原著", "原案", "故事原案", "/原作插(图|绘)?/", [ true, "/原作/", "/连载|連載/" ],
"团长", "超监督", "系列监督", "总监督", "总导演",
"导演", "监督", "联合导演", "副导演", [ true, "/^((OP|ED).*)?(执行|主任).*导演/", 990, "/导演助/" ],
"系列构成", "剧本统筹", "/系列|构成|大纲/",
201, "/(脚|剧)本|编剧|故事|主笔|文(艺|芸|案)|脚色/", 990, "/内容/", [ true, 601, "/对白|台词/" ],
21, "/分镜|故事[板版]|台本/", "OP・ED 分镜", "氛围稿", "/氛围|Image ?Board|イメージボード/i",
"/^(主|总)演出$/", "演出", "演出制作", "/(片(头|尾)|OP|ED)演出/", [ true, "演出助理", "/^演出助/" ],
"/(人物|角色).*原案/", 400, "/(人物|角色).*[设設]/", [ true, 983, "/人物|角色/" ],

"/^(主要?动画师|总作画)$/", "总作画监督", "/(作|原)画总监/", [ true, "总作画监督助理" ], "/机械导演/",
[ false, "作画监督" ], 501, "/(机械|动作|特效)?(作|原|操)画.*(导演|监)|作监$/",
[ true, "作画监督助理", 500, "/作画?[监監]督?(助|補|.+佐|协力)/" ],
"设定", 405, "/[设設]定/", [ true, 989, "/机械/" ],
507, "/[设設]计|Design|デザイン/i", 989, "/原案/", "/字(符|体)|icon|アイコン|logo|ロゴ/i",
507, "/构图|Layout/i", [ true, 502, "/操画/" ], [ false, "原画", "原画师" ],
[ true, "第二原画", "/(作|原)画监?修|修型/" ],
"/作画特殊?效果?/", 987, "/(作|原)画|绘制/", "/数码绘图/", [ false, 500, "/[动動]画?.*(检查?|チェック)/" ], [ true, "补间动画", "扫描", "描线" ],
508, "/[动動]画/",

"/(美|艺)[术術].*(导演|[監监]督|总监|主管|括)/", [ true, 90, "/美[术術]?[監监]督?(助|補|.+佐)/" ],
"主美", 406, "/概念(美|艺)术|视觉概念/", "/美术设(计|定)/", "/美[术術](board|板|ボード)/",
"/(场|布)景设计/", [ false, "背景美术", "/^美[术術]$/", 506, "/(场|布|绘|制)景/", 983, "/景/" ],
[ false, 507, "/(美|艺)[术術]|アート|ART WORK/i" ],
[ true, "/美[术術]((辅|补)佐|[协協]力)/" ], [ true, "/原图整理/" ], [ "/工艺|创意/" ],

"/色彩(导演|监督|总监)/", "/色彩.*设(计|定)/", [ true, 90, "/色彩设计.+佐/" ],
20, "/色彩((脚|剧)本|故事[板版]|演出)|Color ?Script|カラースクリプト/i",
[ false, "/色彩?指定/", 700, "/[色仕].?[检検校]/" ], [ true, "上色", 701, "/色彩|仕上/", 984, "/色/" ],

301, "/(CGI?|3D|三维|立体|电脑).*(导演|[監监]督|总监|主管|统|ディレクター)/", "/^(3D ?CGI?|三维)$/",
"/(CGI?|3D).*演出/", "/(3D|三维) ?(layout|LO|构图)/i", "/(CGI?|3D).*(设计|(美|艺)术|アート)/",
"/(建模|(模|造)(型|形)|モデリング)(导演|监督|总监|主管|ディレクター)/", [ true, 300, "/建模|(模|造)(型|形)|Model/i" ],
"/绑(骨|定)(监督|总监)/", [ true, "/绑|骨/", 303, "/材质|贴图|テクスチャー|Texture?/i" ],
[ true, "/数字背景/", 988, "/地形|建筑|资(源|产)/", "/管线|Pipeline/i", 10, "/LookDev|^UE/", "工程师" ],
"/(动作|武戏|战斗.*)(导演|监督|主管)/", "/动作设计/", [ true, 504, "/动作|表情/" ], "/帧|动作?捕捉?/",
"/(CGI?|3D).*原画/", "/(CGI?|3D|三维).*(动画|アニメーション)/",
"/(CGI?|3D|三维)特效/", 303, "/(CGI?|3D|三维|电脑图形).*制作/",
[ true, 302, "/(CGI?|3D|三维|电脑图形).*(制作人|プロデュース)/", "/(CGI?|3D|电脑图形).*制片人/" ],
[ true, 980, "/CGI?|3D|三维|立体|电脑|コンピュータ/" ],
"/Motion Graphic|モーショングラフィック/i",

300, "/2DCG.*导演/", "/2D(w| ?works|ワークス)/i", "/UI|图形界面/", 980, "/2D|二维/",

"摄影监督", "副摄影监督", 604, "/(中|后)(期|制).*(导演|监督|总监|管|统)/",
[ false, "/張り込み|ハリコミ/", "/摄(影|制)/" ], [ true, "/线拍/" ],
[ true, 608, "/(中|后)期/", 605, "/合成/", "/(摄|撮)|照明|光(源|照)|灯光|映像/", 302, "/渲染|解算/" ],
"/((效|効)|特技)(导演|[監监]督|总监|主管)/", [ true, 609, "/(效|効)|特技|Effect|监视器|モニター/i" ],
"/(V|C)?FX/", [ true, 980, "/视觉/" ], [ true, 987, "/技[术術]|Technical/i" ],

[ false, "剪辑", "编集" ], [ true, 609, "/剪辑|[编編]集/", "/联机/" ],
"/标题|字幕|タイトル/", "/(冲|洗)印|現像|デジタルラボ|介质/", "转录",

"音乐", "/音乐.*(导演|监督|总监)/", [ true, "音乐制作人", "音乐制作", "音乐助理" ],
"演唱", "作词", "作曲", "编曲", [ true, "/音乐/", 606, "/音|乐/i", 605, "/奏|键盘|吉他|贝斯|鼓|弦乐/" ],
"主题歌演出", "主题歌", "主题曲", [ true, "主题歌作词", "主题歌作曲", "主题歌编曲" ],
"/片头(曲|歌曲)(.*演(出|唱))?$/", [ true, "/片头(曲|歌)/" ],
"/片尾(曲|歌曲)(.*演(出|唱))?$/", [ true, "/片尾(曲|歌)/" ],
"插入歌演出", [ true, "插入歌作词", "插入歌作曲", "插入歌编曲" ],
[ true, 603, "/歌|曲|作[词詞]|song/i" ], [ true, "/[选選]曲/" ],

"/(音(响|频)|声音|Sound).*(导演|监督|总监|主管|Direction)/i",
"音响", [ true, "/音响/" ], "音效", [ true, 600, "/音效|拟音/" ],
[ false, "录音" ], [ true, "录音助理", 600, "/录|録/" ], [ true, "/声音/", 604, "/音频|(整|调)音|母带|混|声|調整/" ],
"/(配音|演员).*(导演|监)/", "主演", "/主要配音/", [ true, 603, "/配音|出演|旁白|演(员|出)|声优|キャスティング|cast/i" ], [ true, "/(配音|演员|角色).*(管|统)|选角/" ],

"企画", "企划制作人", 202, "/企[划画]|策划|战略/", [ true, "/企[划画][协協]力/" ],
980, "/出品/", [ true, "总监制", 989, "/监制/" ],
800, "/总制片|[统統概]括/", "制片人", "制片", "执行制片人", [ true, 808, "/制片|プロデューサー/" ],

[ true, 980, "/主编/", 989, "/编辑|ライター/", "/排版|数据|翻译|清书/", 980, "/审|检验/" ],
[ true, 200, "/宣(传|伝|发)?|推广|广告|広報|パンフレット/" ],
[ true, 402, "/市场|运营|营销|销售|セールス|商(务|业)|(商|产)品|パッケージ|衍生|周边|授权|ライセンス|品牌|IP/", "/Business|Sales/i" ],
[ true, 987, "/人事|法务|维权|(财|税)务|后(勤|盾)|支援|^助理|剧务|场记/", "/(水滴|深空)攻坚/", 989, "/支持/" ],
509, "/取材|考(据|证|証)/", [ true, 987, "/校/" ],

"动画制片人",
[ true, 809, "/[制製]作(管理|主任|担当|デスク|总|総|.?监|人)/", "担当制作" ],
[ true, 989, "/统|統|管理/", "计划管理", 801, "/制作助./", 980, "/プロダクション|マネージャー|经理|PM/" ],
[ true, 403, "/[设設]定(制作|管理)/" ], [ true, "/制作(进|進)行/", "制作协调" ],
"动画制作", 500, "/动画制作/", 989, "/制作/", "/定格动画|(ねんど|パペット)アニメ/",
980, "/制作[协協]力/", 990, "/[协協]力?/", 30, "/手语|发音/", 987, "/(监|監)修|顾问|指导/",
[ false, "/同人|题字/", "/谢|Thanks/i" ],

"/官方网站|官网|公式|HP/", [ true, 90, "/(官方网站|官网|公式|HP).*(备份|制作)/" ], "/推特|Twitter|^X$|blog/i", "微博",
"发行", [ true, "/(音像|图书)(出版|发行)/", 981, "/发行/" ], [ true, 990, "/开发/" ],
"播放电视台", "其他电视台", "/bilibili/i", 609, "/网络|在线|播放|配[给給送信]?|番|版/",
"播放结束", "/结束/",
"/JAN(码|番号)|imdb/i", "链接", "价格",

"其他", "/其他/", [ true, "备注" ],
[ false, "===此处插入未被匹配的职位===" ],
10, "/许可证|备案号/", 980, "/官方(支持|伙伴)?/",
"制作", "製作", "製作协力", "/製作委員会|(制作)?著作|出品方?$|版权/", "Copyright"
[/spoiler]
[spoiler=v2.1动画条目]
"===【注释】正则匹配优先级:缺损-100, dd-优先于缺损, 20d-`宣`相关, 30d-`3D`相关, 40d-`设`相关, 50d-`画`相关, 60d-`音`相关, 70d-`色`相关, 80d-`制`相关, 9dd-兜底 ===", 

"中文名", "/^(罗马|拼音|索引)名$/", [ true, "英文名" ],
"类型", "适合年龄", "/地区/", "语言", "对白", "/话数/", [ true, "季数" ], "/(片|时)长/",
"放送开始", "/开始|放送|播出/", 90, "/放送星期/", "放送时间", "/(上|公)映/", "/发售/",

"原作", "原著", [ true, "/连载|連載/" ], "原作插图", [ true, "原作协力", "/原作/" ],
"团长", "超监督", "系列监督", "总监督", "总导演",
"导演", "联合导演", "副导演", [ true, "/^((OP|ED).*)?(执行|主任).*导演/", "/导演助/" ],
"系列构成", "剧本统筹", "/系列|构成|大纲/",
201, "/(脚|剧)本|编剧|故事|主笔|文(艺|芸|案)|脚色/", 990, "/内容/", [ true, 601, "/对白|台词/" ],
20, "/分镜|台本/", "OP・ED 分镜", "氛围稿", "/氛围|Image ?Board|イメージボード/i",
"/^(主|总)演出$/", "演出", "演出制作", "/(片(头|尾)|OP|ED)演出/", [ true, "演出助理", "/^演出助/" ],
"原案", "/(人物|角色).*原案/", 400, "/(人物|角色).*(设|設)/", [ true, 983, "/人物|角色/" ],

"/^(主要?动画师|总作画)$/", "总作画监督", "/(作|原)画总监/", [ true, "总作画监督助理" ], "/机械导演/",
[ false, "作画监督" ], 501, "/(机械|动作|特效)?(作|原|操)画.*(导演|监)|作监$/",
[ true, "作画监督助理", 500, "/作画监督(助|.+佐|协力)/" ],
989, "/原案/", 405, "/(设|設)定/", [ true, 989, "/机械/" ],
"道具设计", 507, "/(设|設)计|Design|デザイン/i", "/字(符|体)|icon|アイコン|logo|ロゴ/i",
507, "/构图|Layout/i", [ true, 502, "/操画/" ], [ false, "原画", "原画师" ],
[ true, "第二原画", "/(作|原)画监修/", 508, "/原画|修型/" ],
"/作画特殊?效果?/", 987, "/作画|绘制/", "/数码绘图/", [ true, "扫描", "描线" ],
[ false, 500, "/动画?.*检查?/" ], [ true, "补间动画" ], 508, "/(动|動)画/",

"/色彩(导演|监督|总监)/", "/色彩.*设(计|定)/", [ true, 90, "/色彩设计.+佐/" ],
"色彩演出", "/色彩((脚|剧)本|故事版)|Color ?Script|カラースクリプト/i",
[ false, "/色彩?指定/", 700, "/(色|仕).?(检|検|校)/" ], [ true, "上色", 701, "/色彩|仕上/", 984, "/色/" ],

"/(美|艺)(术|術).*(导演|(監|监)督|总监|主管|括)/", [ true, 90, "/美(术|術)(監|监)督(助|.+佐)/" ],
"主美", 406, "/概念(美|艺)术|视觉概念/", "/美术设(计|定)/", "/美(术|術)(board|板|ボード)/",
"/(场|布)景设计/", [ false, "背景美术", "/^美(术|術)$/", 506, "/(场|布|绘|制)景/", 983, "/景/" ],
[ false, 507, "/(美|艺)(术|術)|アート|ART WORK/i" ],
[ true, "/美(术|術)(辅|补)佐/" ], [ true, "/原图整理/" ], [ "/工艺|创意/" ],

301, "/(CGI?|3D|三维|立体|电脑).*(导演|(監|监)督|总监|主管|统|ディレクター)/", "/^(3D ?CGI?|三维)$/",
"/(CGI?|3D).*演出/", "/(3D|三维) ?(layout|LO|构图)/i", "/(CGI?|3D).*(设计|(美|艺)术|アート)/",
"/(建模|(模|造)(型|形)|モデリング)(导演|监督|总监|主管|ディレクター)/", [ true, "/(建模|(模|造)(型|形))/" ],
"/绑(骨|定)(监督|总监)/", [ true, "/绑|骨/", 303, "/材质|贴图|テクスチャー/" ],
[ true, "/数字背景/", 988, "/地形|建筑|资(源|产)/", "/管线|Pipeline/i", 10, "/LookDev|^UE/", "工程师" ],
"/(动作|武戏|战斗.*)(导演|监督|主管)/", "/动作设计/", [ true, 504, "/动作|表情/" ], "/帧|动作?捕捉?/",
"/(CGI?|3D).*原画/", "/(CGI?|3D|三维).*(动画|アニメーション)/",
"/(CGI?|3D|三维)特效/", 303, "/(CGI?|3D|三维|电脑图形).*制作/",
[ true, 302, "/(CGI?|3D|三维|电脑图形).*(制作人|プロデュース)/", "/(CGI?|3D|电脑图形).*制片人/" ],
[ true, 980, "/CGI?|3D|三维|立体|电脑|コンピュータ/" ],
"/Motion Graphic|モーショングラフィック/i",

300, "/2DCG.*导演/", "/2D(w| ?works|ワークス)/i", "/UI|图形界面/", 980, "/2D|二维/",

"摄影监督", "副摄影监督", 607, "/(中|后)(期|制).*(导演|监督|总监|管|统)/",
[ false, "/張り込み|ハリコミ/", "/摄(影|制)/" ], [ true, "/线拍/" ],
[ true, 608, "/(中|后)期/", "/(摄|撮)|合成|照明|光(源|照)|灯光|映像/", 302, "/渲染|解算/" ],
"/((效|効)|特技)(导演|(監|监)督|总监|主管)/", [ true, 609, "/(效|効)|特技|Effect|监视器|モニター/i" ],
"/(V|C)?FX/", [ true, 980, "/视觉/" ], [ true, 987, "/技(术|術)/" ],

[ false, "剪辑", "编集" ], [ true, 609, "/剪辑|(编|編)集/", "/联机/" ], [ true, "场记" ],
"/标题|字幕|タイトル/", "/(冲|洗)印|現像|デジタルラボ|介质/", "转录",

"/(音(响|频)|声音).*(导演|监督|总监|主管)/", "音响", [ true, "/音响/" ], "音效", [ true, 600, "/音效|拟音/" ],
[ false, "录音" ], [ true, "录音助理", 600, "/录|録/" ], [ true, "/声音/", 604, "/音频|(整|调)音|母带|混|声|調整/" ],
"/(配音|演员).*(导演|监)/", "主演", "配音", "/^(cast(ing)?|キャスティング)$/i",
[ true, 603, "/配音|出演|演(员|出)|キャスティング/" ], [ true, "/(配音|演员|角色).*(管|统)|选角/" ],

"音乐", "/音乐(导演|监督|总监)/", [ true, "音乐制作人", "音乐制作", "音乐助理" ],
[ true, "/音乐/", 606, "/音|乐/", 605, "/奏/" ],
"主题歌演出", [ true, "主题歌作词", "主题歌作曲", "主题歌编曲" ],
"插入歌演出", [ true, "插入歌作词", "插入歌作曲", "插入歌编曲" ],
"/片头曲(.*演(出|唱))?$/", [ true, "/片头曲/" ], "/片尾曲(.*演(出|唱))?$/", [ true, "/片尾曲/" ],
[ true, 603, "/作(词|詞)/", 603, "/歌|曲/", "/song/i" ], [ true, "/(选|選)曲/" ],

"企画", "企划制作人", 202, "/企(画|划)|策划|战略/", [ true, "/企(画|划)协力/" ],
980, "/出品/", [ true, "总监制", 989, "/监制/" ],
800, "/总制片|(统|統|概)括/", "制片人", "制片", "执行制片人", [ true, 808, "/制片|プロデューサー/" ],

[ true, 980, "/主编/", 989, "/编辑|ライター/", "/排版|数据|翻译|清书/", 980, "/审|检验/" ],
[ true, 981, "/发行/", 200, "/宣(传|伝|发)?|推广|广告|広報|パンフレット/" ],
[ true, 402, "/市场|运营|营销|销售|セールス|商(务|业)|(商|产)品|パッケージ|衍生|周边|授权|ライセンス|品牌|IP/" ],
[ true, 987, "/人事|法务|维权|(财|税)务|后(勤|盾)|支援|^助理/", "/(水滴|深空)攻坚/", 989, "/支持/" ],
509, "/取材|考(据|证|証)/", [ true, 987, "/校/" ],

"动画制片人",
[ true, 809, "/(制|製)作(管理|主任|担当|デスク|总|総|.?监|人)/", "担当制作" ],
[ true, 989, "/统|統|管理/", "计划管理", 801, "/制作助./", 980, "/プロダクション|マネージャー|经理|PM/" ],
[ true, 403, "/(设|設)定(制作|管理)/" ], [ true, "制作进行", "制作进行协力", "制作协调" ],
"动画制作", 989, "/制作/", "/定格动画|(ねんど|パペット)アニメ/",
980, "/制作(协|協)力/", 990, "/(协|協)力?/", 30, "/手语|发音/", 987, "/(监|監)修|顾问|指导/",
[ false, "/同人|题字/", "/谢|Thanks/i" ],

"别名", "/.+名$/",
"/官方网站|官网|公式|HP/", [ true, 90, "/(官方网站|官网|公式|HP).*(备份|制作)/" ], "/推特|Twitter|^X$/i", "微博",
"发行", "开发", "播放电视台", "其他电视台", "/bilibili/i", 609, "/网络|播放|配(给|給|送|信)?|番|版/",
"播放结束", "/结束/",
"/JAN(码|番号)|imdb/i", "链接", "价格",

"其他", "/其他/", [ true, "备注" ],
[ false, "===此处插入未被匹配的职位===" ],
10, "/许可证|备案号/", 980, "/官方(支持|伙伴)?/",
"制作", "製作", "製作协力", "/製作委員会|(制作)?著作|出品方?$|版权/", "Copyright"
[/spoiler]
[spoiler=v2.0动画条目]
"===【注释】正则匹配优先级:缺损-100, dd-优先于缺损, 20d-`宣`相关, 30d-`3D`相关, 40d-`设`相关, 50d-`画`相关, 60d-`音`相关, 70d-`色`相关, 80d-`制`相关, 9dd-兜底 ===", 

"中文名", "/^(罗马|拼音|索引)名$/", [ true, "英文名" ],
"类型", "适合年龄", "/地区/", "语言", "对白", "/话数/", [ true, "季数" ], "/(片|时)长/",
"放送开始", "/开始|放送|播出/", 90, "/放送星期/", "放送时间", "/(上|公)映/", "/发售/",

"团长", "超监督", "总监督", "总导演",
"导演", "联合导演", "副导演", [ true, "/^((OP|ED).*)?(执行|主任).*导演/", "/导演助/" ],
"系列监督", "原作", "原著", [ true, "/连载|連載/" ], "原作插图", [ true, "原作协力", "/原作/" ],
"原案", "/(人物|角色).*原案/", 400, "/(人物|角色).*(设|設)/", [ true, 983, "/人物|角色/" ],
"系列构成", "剧本统筹", "/系列|构成|大纲/",
201, "/(脚|剧)本|编剧|故事|主笔|文(艺|芸|案)|脚色/", 990, "/内容/", [ true, 601, "/对白|台词/" ],
20, "/分镜|台本/", "OP・ED 分镜", "氛围稿", "/氛围|Image ?Board|イメージボード/i",
"/^(主|总)演出$/", "演出", "演出制作", "/(片(头|尾)|OP|ED)演出/", [ true, "演出助理", "/^演出助/" ],

"/^(主要?动画师|总作画)$/", "总作画监督", "/(作|原)画总监/", [ true, "总作画监督助理" ], "/机械导演/",
[ false, "作画监督" ], 501, "/(机械|动作|特效)?(作|原|操)画.*(导演|监)|作监$/",
[ true, "作画监督助理", 500, "/作画监督(助|.+佐|协力)/" ],
989, "/原案/", 405, "/(设|設)定/",
[ true, 989, "/机械/" ],
"道具设计", 507, "/(设|設)计|Design|デザイン/i", "/字(符|体)|icon|アイコン|logo|ロゴ/i",
507, "/构图|Layout/i", [ true, 502, "/操画/" ], [ false, "原画", "原画师" ],
[ true, "第二原画", "/(作|原)画监修/", 508, "/原画|修型/" ],
"/作画特殊?效果?/", 987, "/作画|绘制/", "/数码绘图/", [ true, "扫描", "描线" ],
[ false, 500, "/动画?.*检查?/" ], [ true, "补间动画" ], 508, "/(动|動)画/",

"/色彩(导演|监督|总监)/", "/色彩.*设(计|定)/", [ true, 90, "/色彩设计.+佐/" ],
"色彩演出", "/色彩((脚|剧)本|故事版)|Color ?Script|カラースクリプト/i",
[ false, "/色彩?指定/", 700, "/(色|仕).?(检|検|校)/" ], [ true, "上色", 701, "/色彩|仕上/", 984, "/色/" ],

"/(美|艺)(术|術).*(导演|(監|监)督|总监|主管|括)/", [ true, 90, "/美(术|術)(監|监)督(助|.+佐)/" ],
"主美", 406, "/概念(美|艺)术|视觉概念/", "/美术设(计|定)/", "/美(术|術)(board|板|ボード)/",
"/(场|布)景设计/", [ false, "背景美术", "/^美(术|術)$/", 506, "/(场|布|绘|制)景/", 983, "/景/" ],
[ false, 507, "/(美|艺)(术|術)|アート|ART WORK/i" ],
[ true, "/美(术|術)(辅|补)佐/" ], [ true, "/原图整理/" ], [ "/工艺|创意/" ],

301, "/(CGI?|3D|三维|立体|电脑).*(导演|(監|监)督|总监|主管|统|ディレクター)/", "/^(3D ?CGI?|三维)$/",
"/(CGI?|3D).*演出/", "/(3D|三维) ?(layout|LO|构图)/i", "/(CGI?|3D).*(设计|(美|艺)术|アート)/",
"/(建模|(模|造)(型|形)|モデリング)(导演|监督|总监|主管|ディレクター)/", [ true, "/(建模|(模|造)(型|形))/" ],
"/绑(骨|定)(监督|总监)/", [ true, "/绑|骨/", 303, "/材质|贴图|テクスチャー/" ],
[ true, "/数字背景/", 988, "/地形|建筑|资(源|产)/", "/管线|Pipeline/i", 10, "/LookDev|^UE/", "工程师" ],
"/(动作|武戏|战斗.*)(导演|监督|主管)/", "/动作设计/", [ true, 504, "/动作|表情/" ], "/帧|动作?捕捉?/",
"/(CGI?|3D).*原画/", "/(CGI?|3D|三维).*(动画|アニメーション)/",
"/(CGI?|3D|三维)特效/", 303, "/(CGI?|3D|三维|电脑图形).*制作/",
[ true, 302, "/(CGI?|3D|三维|电脑图形).*(制作人|プロデュース)/", "/(CGI?|3D|电脑图形).*制片人/" ],
[ true, 980, "/CGI?|3D|三维|立体|电脑|コンピュータ/" ],
"/Motion Graphic|モーショングラフィック/i",

300, "/2DCG.*导演/", "/2D(w| ?works|ワークス)/i", "/UI|图形界面/", 980, "/2D|二维/",

"摄影监督", "副摄影监督", 607, "/(中|后)(期|制).*(导演|监督|总监|管|统)/",
[ false, "/張り込み|ハリコミ/", "/摄(影|制)/" ], [ true, "/线拍/" ],
[ true, 608, "/(中|后)期/", "/(摄|撮)|合成|照明|光(源|照)|灯光|映像/", 302, "/渲染|解算/" ],
"/((效|効)|特技)(导演|(監|监)督|总监|主管)/", [ true, 609, "/(效|効)|特技|Effect|监视器|モニター/i" ],
"/(V|C)?FX/", [ true, 980, "/视觉/" ], [ true, 987, "/技(术|術)/" ],

[ false, "剪辑", "编集" ], [ true, 609, "/剪辑|(编|編)集/", "/联机/" ], [ true, "场记" ],
"/标题|字幕|タイトル/", "/(冲|洗)印|現像|デジタルラボ|介质/", "转录",

"/(音(响|频)|声音).*(导演|监督|总监|主管)/", "音响", [ true, "/音响/" ], "音效", [ true, 600, "/音效|拟音/" ],
[ false, "录音" ], [ true, "录音助理", 600, "/录|録/" ], [ true, "/声音/", 604, "/音频|(整|调)音|母带|混|声|調整/" ],
"/(配音|演员).*(导演|监)/", "主演", "配音", "/^(cast(ing)?|キャスティング)$/i",
[ true, 603, "/配音|出演|演(员|出)|キャスティング/" ], [ true, "/(配音|演员|角色).*(管|统)|选角/" ],

"音乐", "/音乐(导演|监督|总监)/", [ true, "音乐制作人", "音乐制作", "音乐助理" ],
[ true, "/音乐/", 606, "/音|乐/", 605, "/奏/" ],
"主题歌演出", [ true, "主题歌作词", "主题歌作曲", "主题歌编曲" ],
"插入歌演出", [ true, "插入歌作词", "插入歌作曲", "插入歌编曲" ],
"/片头曲(.*演(出|唱))?$/", [ true, "/片头曲/" ], "/片尾曲(.*演(出|唱))?$/", [ true, "/片尾曲/" ],
[ true, 603, "/作(词|詞)/", 603, "/歌|曲/", "/song/i" ], [ true, "/(选|選)曲/" ],

"企画", [ true, "企画协力" ], "企划制作人", 202, "/企(画|划)|策划|战略/",
980, "/出品/", [ true, "总监制", 989, "/监制/" ],
800, "/总制片|(统|統|概)括/", "制片人", "制片", "执行制片人", [ true, 808, "/制片|プロデューサー/" ],

[ true, 980, "/主编/", 989, "/编辑|ライター/", "/排版|数据|翻译|清书/", 980, "/审|检验/" ],
[ true, 981, "/发行/", 200, "/宣(传|伝|发)?|推广|广告|広報|パンフレット/" ],
[ true, 402, "/市场|运营|营销|销售|セールス|商(务|业)|(商|产)品|パッケージ|衍生|周边|授权|ライセンス|品牌|IP/" ],
[ true, 987, "/人事|法务|维权|(财|税)务|后(勤|盾)|支援|^助理/", "/(水滴|深空)攻坚/", 989, "/支持/" ],
509, "/取材|考(据|证|証)/", [ true, 987, "/校/" ],

"动画制片人",
[ true, 809, "/(制|製)作(管理|主任|担当|デスク|总|総|.?监|人)/", "担当制作" ],
[ true, 989, "/统|統|管理/", "计划管理", 801, "/制作助./", 980, "/プロダクション|マネージャー|经理|PM/" ],
[ true, 403, "/(设|設)定(制作|管理)/" ], [ true, "制作进行", "制作进行协力", "制作协调" ],
"动画制作", 989, "/制作/", "/定格动画|(ねんど|パペット)アニメ/",
980, "/制作(协|協)力/", 990, "/(协|協)力?/", 30, "/手语|发音/", 987, "/(监|監)修|顾问|指导/",
[ false, "/同人|题字/", "/谢|Thanks/i" ],

"别名", "/.+名$/",
"/官方网站|官网|公式|HP/", [ true, 90, "/(官方网站|官网|公式|HP).*(备份|制作)/" ], "/推特|Twitter|^X$/i", "微博",
"发行", "开发", "播放电视台", "其他电视台", "/bilibili/i", 609, "/网络|播放|配(给|給|送|信)?|番|版/",
"播放结束", "/结束/",
"/JAN(码|番号)|imdb/i", "链接", "价格",

"其他", "/其他/", [ true, "备注" ],
[ false, "===此处插入未被匹配的职位===" ],
10, "/许可证|备案号/", 980, "/官方(支持|伙伴)?/",
"制作", "製作", "製作协力", "/製作委員会|(制作)?著作|出品方?$|版权/", "Copyright"
[/spoiler]
[spoiler=v1.5动画条目]
"中文名", "类型", "适合年龄", "/地区/", "语言", "对白", "/话数/", [ true, "季数" ], 
"放送开始", "/开始/", "放送星期", "放送时间", "/上映/", "发售日", "/片长/",

"原作", [ true, "/連載/" ], "原作插图", [ true, "原作协力" ],
"原案", "人物原案", "人物设定", [ true, "/人.?(设|設)/" ],
"团长", "总导演", "导演", "副导演", "/(执行|主任|联合)导演/",
"系列监督", "系列构成", "脚本", "编剧", [ true, "/脚本|内容|故事|文艺|主笔/" ],
"分镜", "OP・ED 分镜", "主演出", "演出", [ true, "演出助理" ],

"/主(要)?动画师/",
"总作画监督", [ false, "作画监督" ], [ true, "作画监督助理" ], "/.*作画.*(监|导)/",
"设定", "背景设定", "道具设计", "/(?<!色彩|美(术|術)|人)(设|設)(?!.*制)/", "/Design|デザイン/i",
"构图", [ false, "原画" ], [ true, "第二原画", "/原画/" ], "数码绘图",
[ false, "/动画检查/" ], [ true, "补间动画", "/(动|動)画(?!检查)/" ],

"色彩设计", [ false, "/色(彩)?指定/" ], [ true, "上色", "/(?<!角)色/" ],
"/美(术|術).*(监督|导演)/", [ false, "美术设计" ], "/概念(美术)?/",
[ false, "背景美术" ], [ true, "/景/" ],
"/美(术|術)|艺术|工艺|创意|绘制|ART WORK|Motion Graphic|モーショングラフィック/i",

"/CG.*导演/", [ false, "/(2|3)D|CG|コンピュータ/" ], "模型监督", "绑骨监督", [ "/建模|模型|动作|表情|骨/" ],
"摄影监督", "副摄影监督", "后期监督", [ true, "/摄影|合成|照明|拍|(特|动)效|特技|技术|Effect|モニター/i" ],
"現像", "/标题|字幕|タイトル/",
[ false, "剪辑", "编集" ], [ true, "/(?<!音.*)剪辑/" ], [ true, "场记" ],
"/(监|監)修/", "/顾问/",

"音响监督", [ true, "音响", "/^音(响)?效(果)?$/" ], [ true, "/音响/", "拟音" ],
[ false, "录音" ], [ true, "录音助理", "混声", "/录音|声/" ],
"配音", "主演", "キャスティング", [ true, "/配音|((?<!歌)演出)/" ],
"音乐", "音乐制作", [ true, "音乐制作人", "音乐助理" ], [ true, "/音|乐/" ],
"主题歌演出", [ true, "主题歌作词", "主题歌作曲", "主题歌编曲" ],
"插入歌演出", [ true, "插入歌作词", "插入歌作曲", "插入歌编曲" ],
[ true, "选曲" ], [ true, "/曲|歌/" ],

"企画", [ true, "企画协力" ], "企划制作人", "/企(画|划)|出品|策划/", "/监制/",
"执行制片人", "/总制片/", "制片人", "制片", [ true, "/(?<!总)制片/" ],
[ true, "/编辑/" ], [ true, "/行政|审/" ], [ true, "/法务/" ], [ true, "/宣(传|伝)|広報/", "/市场|运营|衍生/" ],
"动画制片人", [ true, "制作管理", "制作主任", "/制作统./", "/制作助./", "计划管理" ],
[ true, "制作进行", "制作进行协力", "制作协调" ],
[ true, "设定制作" ], [ true, "/取材/" ], [ true, "/鸣谢|Thanks/i" ],

"/^(制|製)作$/", [ true, "制作著作" ], "制作协力", "/(协|協)力/",
"动画制作", [ true, "/(制|製)作/" ],
"别名", "/.+名$/",
"发行", "官方网站", "在线播放平台", "链接", "播放电视台", "其他电视台",
"/配(?!音)|番組|版|播放/", "播放结束", "/结束/",

"其他", "/其他/",
[ false, "===此处插入未被匹配的职位===" ],
"Copyright"
[/spoiler]
[spoiler=v1.4动画条目]
"中文名", "类型", "适合年龄", "/地区/", "语言", "对白", "/话数/", [ true, "季数" ], 
"放送开始", "/开始/", "放送星期", "放送时间", "/上映/", "发售日", "/片长/",

"原作", "原案", "人物原案", "人物设定", "原作插图", [ true, "原作协力" ],
"团长", "总导演", "导演", "副导演", "执行导演", "主任导演", "联合导演",
"系列监督", "系列构成", "脚本", "编剧", [ true, "/脚本|内容|故事|文艺|主笔/" ],
"分镜", "OP・ED 分镜", "主演出", "演出", [ true, "演出助理" ],

"总作画监督", [ false, "作画监督" ], [ true, "作画监督助理" ], "/.*作画.*(监|导)/",
"/主.?动画师/", [ true, "构图" ], [ false, "原画" ], [ true, "第二原画", "补间动画" ],
"数码绘图", "/(原|动|動)画(?!检查)/", [ true, "/动画检查/" ],

"设定", "背景设定", "道具设计", "/(?<!色彩|美(术|術))(设|設)(?!.*制)/", "/Design|デザイン/i",
"色彩设计", [ false, "/色.?指定/" ], [ true, "上色", "/(?<!角)色/" ],
"/美(术|術).*(监督|导演)/", [ false, "美术设计" ], "概念美术", "视觉概念", "概念艺术",
[ false, "背景美术" ], [ true, "/景/" ], "/美(术|術)|艺术|工艺|创意|绘制|ART WORK|Motion Graphic|モーショングラフィック/i",

"/CG.*导演/", [ false, "/(2|3)D|CG|コンピュータ/" ], "模型监督", "绑骨监督", [ "/建模|模型|动作|表情|骨/" ],
"摄影监督", "副摄影监督", "后期监督", [ true, "/摄影|合成|照明|拍|(特|动)效|特技|技术|Effect|モニター/i" ],
"現像", "/标题|字幕|タイトル/",
[ false, "剪辑", "编集" ], [ true, "/(?<!音.*)剪辑/" ], [ true, "场记" ],
"/(监|監)修/", "/顾问/",

"音响监督", [ true, "/音响/", "音效", "拟音" ], "录音", [ true, "录音助理", "混声", "/录音|声/" ],
"配音", "主演", "キャスティング", [ true, "/配音|((?<!歌)演出)/" ],
"音乐", "音乐制作", [ true, "音乐制作人", "音乐助理" ], [ true, "/音|乐/" ],
"主题歌演出", [ true, "主题歌作词", "主题歌作曲", "主题歌编曲" ],
"插入歌演出", [ true, "插入歌作词", "插入歌作曲", "插入歌编曲" ],
[ true, "选曲" ], [ true, "/曲|歌/" ],

"企画", [ true, "企画协力" ], "企划制作人", "/企(画|划)|出品|策划/", "/监制/",
"执行制片人", "/总制片/", "制片人", "制片", [ true, "/制片/" ],
[ true, "/编辑/" ], [ true, "/行政|审/" ], [ true, "/法务/" ], [ true, "宣传", "/宣(传|伝)|広報/" ], "/市场|运营|衍生/",
"动画制片人", [ true, "制作管理", "制作主任", "/制作统.?/", "/制作助.?/", "计划管理" ],
[ true, "制作进行", "制作进行协力", "制作协调" ],
[ true, "设定制作" ], [ true, "/取材/" ], [ true, "/鸣谢|Thanks/i" ],

"/^(制|製)作$/", [ true, "制作著作" ], "制作协力", "/(协|協)力/",
"动画制作", [ true, "/(制|製)作/" ],
"别名", "/.+名$/",
"发行", "官方网站", "在线播放平台", "链接", "播放电视台", "其他电视台",
"/配(?!音)|連載|番組|版|播放/", "播放结束", "/结束/",

"其他", "/其他/",
[ false, "===此处插入未被匹配的职位===" ],
"Copyright"
[/spoiler]
[spoiler=v1.4书籍条目]
"中文名", "/名/", 
[ false, "===此处插入未被匹配的职位===" ],
">>>此处插入二级职位引导>>>",
"ISBN"
[/spoiler]
[spoiler=v1.3音乐条目]
"制作人", 
"艺术家", "作词", "作曲", "编曲",
"脚本", "声乐", "乐器", "混音", "母带制作",
"插图", "原作", "出版方", "厂牌"
数据来自 此处[/spoiler]
[spoiler=v1.2动画条目]
"中文名", "类型", "适合年龄", "/地区/", "语言", "对白", "话数", "总话数", [ true, "季数" ], 
"放送开始", "开始", "放送星期", "放送时间", "上映年度", "/上映/", "发售日", "片长", "/片长/",

"原作", "原案", "人物原案", "人物设定", "原作插图", [ true, "原作协力" ],
"团长", "总导演", "导演", "副导演", "执行导演", "主任导演", "联合导演", "系列监督",
"系列构成", "脚本", "编剧", [ true, "/脚本|内容|故事|文艺|主笔/" ],
"分镜", "OP・ED 分镜", "主演出", "演出", [ true, "演出助理" ],

"总作画监督", [ false, "作画监督" ], [ true, "作画监督助理" ], "动作作画监督", "机械作画监督", "特效作画监督", "/.*作画.*(监|导)/",
"主动画师", "主要动画师", [ true, "构图" ], [ false, "原画" ], [ true, "第二原画", "补间动画" ], "数码绘图", "/(原画|动画|動画)(?!制|检查)/",
"动画检查", [ true, "/动画检查/" ],

"设定", "背景设定", "道具设计", "/(?<!色彩|美术|美術)(设|設)(?!.*制)/", "/Design|デザイン|Motion Graphic|モーショングラフィック/",
"色彩设计", [ false, "色彩指定", "色指定" ], [ true, "上色", "/(?<!角)色/" ],
"美术监督", "/(美术|美術).*导演/", [ false, "美术设计" ], "概念美术", "视觉概念", "概念艺术",
[ false, "背景美术" ], [ true, "/景/" ], "/ART WORK|美术|美術|艺术|工艺|创意|绘制/",

"3DCG 导演", "CG 导演", "/CG.*导演/", "3DCG", [ false, "/2D|3D|CG|コンピュータ/" ], "模型监督", "绑骨监督", [ "/建模|模型|动作|表情|骨/" ],
"摄影监督", "副摄影监督", "后期监督", [ true, "摄影", "特效", "照明", "特技", "/摄影|モニター|特效|动效|合成|拍|Effect|技术/" ],
"現像", "/タイトル|标题|字幕/",
[ false, "剪辑", "编集" ], [ true, "/(?<!音.*)剪辑/" ], "编辑", [ true, "场记" ],
"监修", "/监修|監修/", "顾问", "/顾问/",

"音响监督", [ true, "音响", "音响制作", "音效", "拟音", "/音响/" ], "录音", [ true, "录音助理", "混声", "/录音|声/" ],
"配音", "主演", "キャスティング", [ true, "/配音|((?<!歌)演出)/" ],
"音乐", "音乐制作", [ true, "音乐制作人", "音乐助理" ], [ true, "/音/" ],
"主题歌演出", [ true, "主题歌作词", "主题歌作曲", "主题歌编曲" ], "插入歌演出",
[ true, "插入歌作词", "插入歌作曲", "插入歌编曲" ], [ true, "选曲" ], [ true, "/曲|歌/" ],

"企画", [ true, "企画协力" ], "企划制作人", "/企画|企划|出品|策划/", "监制", "/监制/",
"执行制片人", "总制片人", "制片人", "总制片", "制片", [ true, "副制片人", "联合制片人", "助理制片人", "/(?<!动画|動画)制片/" ],
[ true, "/行政|审/", "责任编辑" ], [ true, "/法务/" ], [ true, "宣传", "/宣传|宣伝|広報/" ], "/市场|运营|衍生/",
"制作", "製作", [ true, "制作著作" ],
"动画制片人", [ true, "制作管理", "制作统筹", "制作主任", "制作助理" ],
[ true, "设定制作" ], [ true, "计划管理", "制作进行", "制作进行协力" ],
"制作协调", "制作协力", "制作助手", "协力", "/协力|協力/", [ true, "/取材/" ], [ true, "特别鸣谢", "/鸣谢|Thanks/" ],

"动画制作", [ true, "/制作|製作/" ],
"别名", "/.+名$/",
"发行", "官方网站", "在线播放平台", "链接", "播放电视台", "其他电视台", "配给", "/配(?!音)|連載|番組|版|播放(?!结束)/",
"播放结束", "结束",

"其他", "/其他/",
"===此处插入未被匹配的职位===",
"Copyright"
[/spoiler]
[spoiler=v1.1动画条目]
"中文名", "类型", "适合年龄", "/地区/", "语言", "对白", "话数", "总话数", [ true, "季数" ], 
"放送开始", "开始", "放送星期", "放送时间", "上映年度", "/上映/", "发售日", "片长", "/片长/",

"原作", "原案", "人物原案", "原作插图", [ true, "原作协力" ],
"团长", "总导演", "导演", "副导演", "执行导演", "主任导演", "联合导演", "系列监督",
"系列构成", "脚本", "编剧", [ true, "/脚本|内容|故事|文艺|主笔/" ],
"分镜", "OP・ED 分镜", "主演出", "演出", [ true, "演出助理" ],
"人物设定",

"总作画监督", [ false, "作画监督" ], [ true, "作画监督助理" ], "动作作画监督", "机械作画监督", "特效作画监督", "/.*作画.*(监|导)/",
"主动画师", "主要动画师", [ true, "构图" ], [ false, "原画" ], [ true, "第二原画", "补间动画" ], "数码绘图", "/(原画|动画|動画)(?!制|检查)/",
"动画检查", [ true, "/动画检查/" ],

"设定", "背景设定", "道具设计", "/(?<!色彩|美术|美術)(设|設)(?!.*制)/", "/Design|デザイン|Motion Graphic|モーショングラフィック/",
"色彩设计", [ false, "色彩指定", "色指定" ], [ true, "上色", "/(?<!角)色/" ],
"美术监督", "/(美术|美術).*导演/", [ false, "美术设计" ], "概念美术", "视觉概念", "概念艺术",
[ false, "背景美术" ], [ true, "/景/" ], "/ART WORK|美术|美術|艺术|工艺|创意|绘制/",

"/CG.*导演/", "3DCG", [ false, "/2D|3D|CG|コンピュータ/" ], "模型监督", "绑骨监督", [ "/建模|模型|动作|表情|骨/" ],
"摄影监督", "副摄影监督", "后期监督", [ true, "摄影", "特效", "照明", "特技", "/摄影|モニター|特效|动效|合成|拍|Effect|技术/" ],
"現像", "/タイトル|标题|字幕/",
[ false, "剪辑", "编集" ], [ true, "/(?<!音.*)剪辑/" ], "编辑", [ true, "场记" ],
"监修", "/监修|監修/", "顾问", "/顾问/",

"音响监督", [ true, "音响", "音响制作", "音效", "拟音", "/音响/" ], "录音", [ true, "录音助理", "混声", "/录音|声/" ],
"配音", "主演", "キャスティング", [ true, "/配音|((?<!歌)演出)/" ],
"音乐", "音乐制作", [ true, "音乐制作人", "音乐助理" ], [ true, "/音/" ],
"主题歌演出", [ true, "主题歌作词", "主题歌作曲", "主题歌编曲" ], "插入歌演出",
[ true, "插入歌作词", "插入歌作曲", "插入歌编曲" ], [ true, "选曲" ], [ true, "/曲|歌/" ],

"企画", [ true, "企画协力" ], "企划制作人", "/企画|企划|出品|策划/", "监制", "/监制/",
"执行制片人", "总制片人", "制片人", "总制片", "制片", [ true, "副制片人", "联合制片人", "助理制片人", "/(?<!动画|動画)制片/" ],
[ true, "/行政|审/", "责任编辑" ], [ true, "/法务/" ], [ true, "宣传", "/宣传|宣伝|広報/" ], "/市场|运营|衍生/",
"制作", "製作", [ true, "制作著作" ],
"动画制片人", [ true, "制作管理", "制作统筹", "制作主任", "制作助理" ],
[ true, "设定制作" ], [ true, "计划管理", "制作进行", "制作进行协力" ],
"制作协调", "制作协力", "制作助手", "协力", "/协力|協力/", [ true, "/取材/" ], [ true, "特别鸣谢", "/鸣谢|Thanks/" ],

"动画制作", [ true, "/制作|製作/" ],
"别名", "/.+名$/",
"发行", "官方网站", "在线播放平台", "链接", "播放电视台", "其他电视台", "配给", "/配(?!音)|連載|番組|版|播放(?!结束)/",
"播放结束", "结束",

"其他", "/其他/",
"===此处插入未被匹配的职位===",
"Copyright"
[/spoiler]
[spoiler=v1.0 动画条目]
"中文名", "类型", "适合年龄", "/地区/", "语言", "对白", "话数", "总话数", [ true, "季数" ], 
"放送开始", "开始", "放送星期", "放送时间", "上映年度", "/上映/", "发售日", "片长", "/片长/",

"原作", "原案", "人物原案", "原作插图", [ true, "原作协力" ],
"团长", "总导演", "导演", "副导演", "执行导演", "主任导演", "联合导演", "系列监督",
"系列构成", "脚本", "编剧", [ true, "/脚本|内容|故事|文艺|主笔/" ],
"分镜", "OP・ED 分镜", "主演出", "演出", [ true, "演出助理" ],
"人物设定",

"总作画监督", [ false, "作画监督" ], [ true, "作画监督助理" ], "动作作画监督", "机械作画监督", "特效作画监督", "/.*作画.*(监|导)/",
"主动画师", "主要动画师", [ true, "构图" ], [ true, "原画" ], [ true, "第二原画", "补间动画" ], "数码绘图", "/(原画|动画|動画)(?!制|检查)/",
"动画检查", [ true, "/动画检查/" ],

"设定", "背景设定", "道具设计", "/(?<!色彩|美术|美術)(设|設)(?!.*制)/", "/Design|デザイン|Motion Graphic|モーショングラフィック/",
"色彩设计", [ false, "色彩指定", "色指定" ], [ true, "上色", "/(?<!角)色/" ],
"美术监督", "/(美术|美術).*导演/", [ false, "美术设计" ], "概念美术", "视觉概念", "概念艺术",
[ false, "背景美术" ], [ true, "/景/" ], "/ART WORK|美术|美術|艺术|工艺|创意|绘制/",

"/CG.*导演/", "3DCG", [ false, "/2D|3D|CG|コンピュータ/" ], "模型监督", "绑骨监督", [ "/建模|模型|动作|表情|骨/" ],
"摄影监督", "副摄影监督", "后期监督", [ true, "摄影", "特效", "照明", "特技", "/摄影|モニター|特效|动效|合成|拍|Effect|技术/" ],
"現像", "/タイトル|标题|字幕/",
[ false, "剪辑", "编集" ], [ true, "/(?<!音.*)剪辑/" ], "编辑", [ true, "场记" ],
"监修", "/监修|監修/", "顾问", "/顾问/",

"音响监督", [ true, "音响", "音响制作", "音效", "拟音", "/音响/" ], "录音", [ true, "录音助理", "混声", "/录音|声/" ],
"配音", "主演", "キャスティング", [ true, "/配音|((?<!歌)演出)/" ],
"音乐", "音乐制作", [ true, "音乐制作人", "音乐助理" ], [ true, "/音/" ],
"主题歌演出", [ true, "主题歌作词", "主题歌作曲", "主题歌编曲" ], "插入歌演出",
[ true, "插入歌作词", "插入歌作曲", "插入歌编曲" ], [ true, "选曲" ], "/曲|歌/",

"企画", [ true, "企画协力" ], "企划制作人", "/企画|企划|出品|策划/", "监制", "/监制/",
"执行制片人", "总制片人", "制片人", "总制片", "制片", [ true, "副制片人", "联合制片人", "助理制片人", "/(?<!动画|動画)制片/" ],
[ true, "/行政|审/", "责任编辑" ], [ true, "/法务/" ], [ true, "宣传", "/宣传|宣伝|広報/" ], "/市场|运营|衍生/",
"制作", "製作", [ true, "制作著作" ],
"动画制片人", [ true, "制作管理", "制作统筹", "制作主任", "制作助理" ],
[ true, "设定制作" ], [ true, "计划管理", "制作进行", "制作进行协力" ],
"制作协调", "制作协力", "制作助手", "协力", "/协力|協力/", [ true, "/取材/" ], [ true, "特别鸣谢", "/鸣谢|Thanks/" ],

"动画制作", [ true, "/制作|製作/" ],
"别名", "/.+名$/",
"发行", "官方网站", "在线播放平台", "链接", "播放电视台", "其他电视台", "配给", "/配(?!音)|連載|番組|版|播放(?!结束)/",
"播放结束", "结束",

"其他", "/其他/",
"===此处插入未被匹配的职位===",
"Copyright"
[/spoiler]

===本楼层请勿回复===
#4 - 2024-11-16 17:16
(‮✩ ‭<ゝω・)
好,等你支持其余的条目类型
这么复杂精巧的设置格式……你在设计开发的过程中到底经历了什么?
#4-1 - 2024-11-16 17:35
唯独惑
其实本身数据格式很简单很直观...但原本是不支持用户从外部修改,为了能修改,就需要UI...但我不想设计一个复杂的UI,想仅仅通过一个输入文本框来实现...但由于你不知道用户会输入什么?用户也不知道你需要输入什么?所以代码的行数与说明文档的行数才蹭蹭地往上涨了...
#4-2 - 2024-11-16 17:41
唯独惑
哦~我回想起来了,这一切的罪恶,要从我想把职位的顺序、折叠的职位这两者的信息存储在一个数据上说起...
对于小的数据量来说,二者分开存储分开编辑也行,但数据量变大时,编辑管理起来就会非常不方便...因此才诞生这凡此种种啊~
#4-3 - 2024-11-29 22:57
唯独惑
终于!已支持所有类型的条目!
但...默认数据只有动画条目才有,其他的默认数据我准备完成了未被匹配的职位信息进行存储与管理功能后再做...
目前可以先自定义(bgm24)
#5 - 2024-11-24 15:48
想了想...还是将部分已完善的功能整合出来,先发布一个小版本(bgm38)
正在将一些功能通过对象类型与类进行重构,以便于后续添加其他模块并拓展支持的条目类型
直到代码逻辑部分上千行了才这么做,是不是有点晚了...
#6 - 2024-12-4 20:26

== 本楼层请回复 ==
求求你了!不然我只能要挪窝了


接口说明 v2025.02.12

[New] 提供了一个基于 localStorage共享数据 接口。
其他脚本可以通过读取并解析该共享数据,获得用户当前自定义 / 默认设置的各类型条目的职位顺序,并可直接用于 Array.sort() 形式的排序,同时对该共享数据的行为应为只读。

[spoiler=1. 数据键名]
1.1 命名格式
BangumiStaffSorting_<SubjectType>JobOrderMap
其中参数 SubjectType 表示条目类型

1.2 参数定义
SubjectType = "anime" | "book" | "music" | "game" | "real" | "character" | "person"
Bangumi API 中相应参数的数值等同

1.3 键名示例
BangumiStaffSorting_animeJobOrderMap
表示动画类型条目的共享数据
[/spoiler]
[spoiler=2. 数据格式]
数值存储为 JSON 字符串,其格式命名为 JobOrderMap,具体如下:
// 是一张分组映射表,用于映射匹配职位的序列号,初值为`StaffMapList`的解析数据。
// 其中序列号`number`的大小表示该匹配职位的次序,奇偶表示该匹配职位是否默认折叠。
type JobOrderMap = {
  // 精确匹配,以及用于存储正则匹配、插入未被匹配的历史记录
  exact: { [key: string]: number };
  // 插入匹配,目前有插入未被匹配的职位信息、插入二级职位引导信息
  insert: { [key: string]: number };
  // 正则匹配,0-正则表达式,1-职位次序,2-匹配优先级,整体已按优先级排序
  regex: [ [RegExp, number, number] ];
};
普通应用基本只需使用 exact 字段,并且只需关心序列号 number 的大小。
数据示例如下:
const animeJobOrderMap = {
  exact: {
    // 原本的精确匹配
    "放送开始": 2,
    // 正则表达式 /开始|放送|播出/ 匹配记录
    "开始": 4,
    "TV版放送开始": 4,
    "TV放送日期": 4,
    "播出日期": 4,
    // 正则表达式 /放送星期/ 匹配记录
    "TV放送星期": 7,
    "放送星期": 7,
    // 插入匹配记录
    "放送时间": 9,
  },
  insert: {
    "==": 9, // 插入未被匹配的职位
  },
  regex: [ // 正则表达式均未活化
    ["/放送星期/", 7, 90],
    ["/开始|放送|播出/", 4, 100],
  ]
};

[New] v1.4.4-2.0 版本后对 JobOrderMap 的修改:
- 本脚本将维护 JobOrderMap.exact 内数据按职位次序的有序性,以便于数据呈现;
- JobOrderMap.regex 的数据类型由 [RegExp, number][] 转变为 [RegExp, number, number][],同时其内数据将按优先级顺序排列;
- 上述修改基本无需对数据读取解析排序相关代码进行同步修改,可以顺延。
[/spoiler]
[spoiler=3. 数据读取与解析]
普通应用只需要 exact 字段,无需对 regex 字段内字符串类型的正则表达式进行活化,因此可以直接使用 JSON.parse() 进行解析。示例如下:
const subjectType = 'anime';

/** @type {null | Object<string, number>} */
let interfaceOrder = null;

function loadInterfaceOrder() {
  const jsonStr = localStorage.getItem(`BangumiStaffSorting_${subjectType}JobOrderMap`);
  if (!jsonStr) return;
  try {
    const parsedMap = JSON.parse(jsonStr);
    interfaceOrder = parsedMap.exact;
  } catch {
    interfaceOrder = null;
    return;
  }
  if (interfaceOrder === undefined || typeof interfaceOrder !== "object") {
    interfaceOrder = null;
  }
}

如需要完全解析 JobOrderMap,可以参照本脚本中 StaffMapList._loadResolvedData() 的相关实现。
[/spoiler]
[spoiler=4. 数据应用与排序]
普通应用,对于开启继承历史匹配记录功能的用户来说,是足够的,同时防范地将应用未被匹配的职位的序列号设为 Infinity 即可。示例如下:
/** @type {Object<string, number>} */
const defaultOrder = {};

/** @type {null | Object<string, number>} */
let interfaceOrder = null;

function getIndex(jobInData, useInterface) {
  const job = getJobInData(jobInData);
  if (useInterface) {
    const index = interfaceOrder[job];
    if (index === undefined) return Infinity;
    else return index;
  } else return defaultOrder[job];
}

/** @param {Array} jobInDataList  */
function sort(jobInDataList) {
  const useInterface = interfaceOrder !== null;
  jobInDataList.sort((a, b) => getIndex(a, useInterface) - getIndex(b, useInterface));
}

如需要完全应用 JobOrderMap 其中的正则匹配与插入匹配,可以参照本脚本中 BaseStaffSorter.getMatchIndex() 的相关实现。
[/spoiler]

[spoiler=[Old] 异步通信接口,已废止,留作黑历史]
实现了一个基于 localStorage 的异步通信接口。
任何组件 / 脚本均可按 约定方式 写入键值对,本组件会在响应范围内的 URL 内,读取与验证该数据,并根据用户当前自定义 / 默认设置对数据进行排序,随后将排序结果按 约定方式 写入键值对,且会对该结果的 同步性 进行维护。
据此,其他组件 / 脚本所需向用户呈现的有限个静态的职位信息的次序,与用户在本组件设定的 infobox 职位信息的次序,在彼此解耦与跨页面的情形下,可以保持在用户容忍范围内的延迟(一至两次的页面载入 / 刷新)同步性

1. 约定方式
以下,键值格式均为标准 JSON 格式,并简称提供该接口服务的一方为 接口 ,使用该接口服务的一方为  应用

1.1 注册
应用首先需要在 localStorage 内指定的共享键值中进行注册,一条注册对应一条写入数据。
所指定的共享注册表的键名为 BangumiStaffSortingInterface__sharedRegister__
键值格式为:
// 应用名称,建议以组件ID或组件英文名称命名,不得重名
type AppName = string;
// 应用传入数据的条目类型
type SubjectType = "anime" | "book" | "music" | "game" | "real" | "character" | "person";
// 共享注册表
type SharedRegister = Record<AppName, SubjectType>;
- 应用名不得重名,重名将会覆写他人的应用注册,接入的应用也可选择在本贴留个 足印
- 应用一经注册后,不建议再对其进行修改;
- 若条目类型无效,接口将会报错,不予处理;
- 若共享注册表被污染处于不可解析的状态,接口会将其初始化;
- 借助注册表,接口无需再遍历键值对;
- 未约定共享注册表应对并发写入的上锁机制,一是接入的应用少,二是写入失败无非是下次页面加载再写入

1.2 写入
注册后的应用,需向 localStorage 写入约定的键名、指定键值格式的数据。
约定的键名为 BangumiStaffSortingInterface_${subjectType}${appName}
键值格式为:
// 应用的待排序数据,列表元素支持两种格式:
// 1. 职位名称
// 2. 具有以`Key`为字段存储职位名称的对象
type AppData = Array<string> | Array<{ key: string; [key: string]: unknown }>;
// 应用的传入数据版本
type AppVersion = unknown;
// 键值格式
type AppValue = { data: AppData, version: AppVersion };
- 待排序数据支持两种类型,传入不符合类型的数据接口将会报错;
- 版本为任意类型,接口只会比较其与历史是否绝对相同;
- 应用更新待排序数据后,应该同步更改版本号;
- 接口对该键值权限为只读。

1.3 读取
排序后的结果,接口将以约定的键名、相应键值格式写入 localStorage 供应用读取。
约定的键名为 BangumiStaffSortingInterface_${subjectType}${appName}_sorted
键值格式为:
// 排序后的数据
type SortedData = Array<string> | Array<{ key: string; [key: string]: unknown }>;
// 排序后的原数据索引
type SortedIndex = Array<number>;
// 原数据版本
type SortedVersion = unknown;
// 键值格式
type SortedValue = { data: SortedData, index: SortedIndex, version: SortedVersion };
- 数据与版本的类型,就是应用写入的类型;
- 提供数据与索引两种排序结果;
- 其中的 sortedVersion 是接口用于和 appVersion 比对,判断数据有无更新必要;
- 应用对该键值权限应为只读。

1.4 示例
以下提供一个完整的简单示例:
// 注册
BangumiStaffSortingInterface__sharedRegister__ = {
    "AppTest": "anime"
};
// 写入
BangumiStaffSortingInterface_animeAppTest = {
    data: ["导演", "分镜", "演出", "脚本"],
    version: "0.1"
};
// 读取
BangumiStaffSortingInterface_animeAppTest_sorted = {
    data: ["导演", "脚本", "分镜", "演出"],
    index: [0, 3, 1, 2],
    version: "0.1"
};


2. 同步性
以下对排序后的数据的同步性进行说明。

2.1 与原数据版本的同步
响应范围内的相对 URL 路径为:
/(subject|character|person)\/.*|settings\/privacy.*/
- 就是原本组件 @match 所匹配的 URL ,未因接口实现而进行扩展,因为已满足用户基本需求,就不占用过多的资源。

待相应范围内的页面加载,接口延迟响应 1000ms 后,接口将会对共享注册表及其映射的键值对进行一次扫描与验证,以及可能的更新与写入。
- 每次页面加载后,只进行唯一一次的扫描;
- 接口扫描延迟 1000ms ,但共享注册表的验证与初始化会先于本组件的主任务前完成,也就是应用写入新的数据后需要等待至少一次的页面重新加载才可获取到数据结果。

2.2 与用户自定义 / 默认排序设置的同步
每次页面加载后,应用数据仅扫描一次,但数据结果的更新次数可以不止一次。不止一次的情形发生在,用户在设置页面对相应条目类型的内容进行修改保存时,会同步对排序结果进行修改。同时,本组件的默认设置数据版本发生更新时,所有的应用数据结果也将进行更新。因此,可以说排序结果与用户自定义 / 默认排序设置是基本完全同步的。
- 有一个会发生不同步的例外情形,当用户设置 BangumiStaffSorting_${subjectType}EnableState 的键值为 allDisable 时,infobox 将使用网页原有的职位顺序,而接口传递的排序数据不会对其进行判断,仍然采用的是用户当前自定义 / 默认的设置,应用可选择是否依据该键值的状态启用默认的顺序。


3. 代码实现
采用原生JS实现的基本功能示例
const appName = "AppTest";
const subjectType = "anime"
const interfaceKeyPref = "BangumiStaffSortingInterface";
const registerKey = `${interfaceKeyPref}__sharedRegister__`;
const appKey = `${interfaceKeyPref}_${subjectType}${appName}`;
const sortedKey = `${appKey}_sorted`;

let appData = ["导演", "分镜", "演出", "脚本"];
let appVersion = "1.0";

// 判断是否存在注册表,若存在表但未注册则进行注册
function hasRegister() {
  let register;
  try { register = JSON.parse(localStorage.getItem(registerKey)); }
  catch { return false; }
  if (!register || typeof register !== "object") return false;
  else if (register[appName] !== subjectType) {
    register[appName] = subjectType;
    localStorage.setItem(registerKey, JSON.stringify(register));
    console.log(`在 ${registerKey} 中注册 {${appName}: ${subjectType}}`);
  }
  return true;
}

// 判断是否写入最新数据,若非则写入
function writeIfNeeded() {
  const appValue = JSON.parse(localStorage.getItem(appKey));
  if (!appValue || appValue.version !== appVersion) writeValue();
}

// 写入应用数据
function writeValue() {
  const appValue = JSON.stringify({ data: appData, version: appVersion });
  localStorage.setItem(appKey, appValue);
}

// 读取排序后的数据
function fetchSortedData() {
  const value = localStorage.getItem(sortedKey);
  if (!value) return null;
  const sortedValue = JSON.parse(value);
  console.log(`获得排序结果`, sortedValue);
  return sortedValue.data, sortedValue.index; // 选择二者之一进行后续处理
}

function main() {
  const sortedData = fetchSortedData();
  if (sortedData) {
    // 应用排序结果
   
  } else {
    // 使用默认排序

  }
  // 可以异步进行验证与写入,使其不占用主任务进程
  setTimeout(() => {
    // 在用户使用了该接口服务的状态下,再进行写入
    if (hasRegister()) writeIfNeeded();
  }, 500); // 适当延迟但建议不要超过1000ms
}

[/spoiler]

===本楼层请勿回复===
#7 - 2024-12-19 18:57
又是一个大版本的更新,又重构了一次代码
本次完全丢弃了之前的匹配排序逻辑,其实先前已经优化了好几次,但都未触及根本
简述下更改前后的变化:

经算法重构,并修改 StaffMapList 的解析数据的结构,诞生了 JobOrderMap
总的解析排序复杂度由原本的 O(k+m+n + nk·T) 变为 O(k+m+n + nk·t + klogk)
借助记忆匹配记录,最高可达到 O(k+m+n + klogk) ,其中:
- kli 元素的个数
- m 为精确匹配规则的数量
- n 为正则匹配规则的数量
- t / T 为正则表达式平均匹配时间
其中的匹配逻辑 nk·T 实现为 for(n+m){for(k not M){T}}nk·t 实现为 for(k not M){for(n){t}}
因此对总复杂度的影响 T >> t,同时借助该循环方式的改变,实现了精确匹配绝对优先于正则匹配

其实更改数据结构后,是意外发现可以记忆匹配记录的...
但此匹配记录记忆和待开发功能中的匹配记录存储、管理与解析稍有不同,我的预期实现如图:


但目前连数据结构都还没设计好,未来也可能要鸽一段时间了
#8 - 2025-1-8 15:30
(‮✩ ‭<ゝω・)
组件使用感想:三状态切换键好炫酷

一个对UI的主观审美提议:开启职位信息高度限制折叠后,这个「▶」展开按钮会让 infobox 的字段名不再垂直对齐,造成一定程度的强迫症效应
可以考虑把展开按钮移到字段末尾吗?

左侧箭头:现在展开按钮的位置;右侧箭头:字段末尾
#8-1 - 2025-1-8 20:02
唯独惑
可以实现..但会回到原先的老问题:需要外包了一层 div。因为被折叠的字段末尾自身是无法实现类似当前的 + 的效果(我的 + 也是依附于其前 / 后的未被折叠的 ul.li 才实现的)

作为替代:
0. 原方案;
1. 去除职位名称前的箭头。尝试了下,感觉指示性会显著降低;
2. 将原本在职位名称前的箭头,置于职位名称冒号后。尝试了下,指示性有了,对齐度也有了,但我感觉不太美观

结论:要不将三种方案做成一个设置按钮,交由用户自行决定~再应用一遍三状态切换
#8-2 - 2025-1-9 16:46
Hyary
唯独惑 说: 可以实现..但会回到原先的老问题:需要外包了一层 div。因为被折叠的字段末尾自身是无法实现类似当前的 + 的效果(我的 + 也是依附于其前 / 后的未被折叠的 ul.li 才实现的)

作为替代:
...
最终决定当然是看你了,只是加设置还是算了吧
#8-3 - 2025-1-9 18:20
唯独惑
Hyary 说: 最终决定当然是看你了,只是加设置还是算了吧
我倒是觉得交由用户选择也不失为一种选择嘛...
贴一下三种方案的效果图:


PS 最近对 StaffMapList 做了一次数据结构改进,增加了正则表达式的优先级设定,替代原本低效的否定查找,数据与旧版本双向兼容。决定好,我就在一个版本里一起发布了~
#9 - 2025-2-13 23:46
超合金组件已更新
本次收集了近一千条动画条目的一千余条职位名称记录,进一步完善了相关职位的匹配与顺序
#10 - 2025-5-4 15:57
小更新
主要完善了下设置说明
改用 tooltip 显示被折叠职位的名称,响应更及时
优化了更多制作人员按钮被 dock 遮挡下的效果
#11 - 2025-7-6 17:40
(小圣杯邀请码: whyjxz14#576501)
虽然但是,我想问一下,你为什么要做成点了更多制作人员然後它就变成更少制作人员了,只是因为这样点起来比较快吗(bgm38)
#12 - 2026-4-12 16:55
(一般通过条吃動画漫画的怪物)
你好 最近隐私页改了样式后设置界面似乎一并消失了(bgm38) 要不要移到个性化工具栏里去呢