深入解析 @directus/format-title:把 camelCase、下划线与普通句子统一规范化为 Title Case 的字符串格式化工具

发布时间:2026/10/30 9:38:02

深入解析 @directus/format-title:把 camelCase、下划线与普通句子统一规范化为 Title Case 的字符串格式化工具 深入解析 directus/format-title把 camelCase、下划线与普通句子统一规范化为 Title Case 的字符串格式化工具【免费下载链接】directusThe flexible backend for all your projects Turn your DB into a headless CMS, admin panels, or apps with a custom UI, instant APIs, auth more.项目地址: https://gitcode.com/GitHub_Trending/di/directusdirectus/format-title 是 Directus 开源仓库中独立发布的字符串格式化子包其核心使命是把 camelCase、PascalCase、snake_case 乃至普通英文句子统一转换为符合出版规范的 Title Case标题大小写。本文将从该包的 README 出发结合 核心实现、词表常量 与 测试用例讲清它的安装方式、调用签名、默认分隔符规则以及底层那套专有大小写词 首尾词 短词小写的 APA 风格判定管线帮助你在自己的数据展示、字段名美化或 UI 文案场景中直接用上这套能力。包定位解决机器命名 → 人类可读标题的最后一公里在真实业务中数据库字段往往叫snowWhiteAndTheSevenDwarfs、NewcastleUponTyne、apple_releases_new_ipad这类便于代码引用的标识符而展示给用户时却希望看到 Snow White and the Seven Dwarfs 这样自然、规范的标题。directus/format-title 就是为此设计的定制格式化器custom formatter。按 README 的定位它默认可以把四种输入风格转换为 Title CasecamelCase如snowWhiteAndTheSevenDwarfsPascalCase如NewcastleUponTyneunderscore/snake_case如brighton_on_sea以及常规句子regular sentences。转换遵循美国心理学会发布的 Title Case 规范 明确援引主要词汇使用大写而定冠词、连词与介词除非出现在标题开头或结尾否则一律不大写。例如and、on、the这些词在标题中部保持小写这就是 Snow Whiteandthe Seven Dwarfs 而不是 Snow White And The Seven Dwarfs 的原因。转换效果速览README 给出了一组直观的输入/输出对照这些样例同时被固化在 src/index.test.ts 中作为 vitest 断言用例保证行为可回归验证InputOutputsnowWhiteAndTheSevenDwarfsSnow White and the Seven DwarfsNewcastleUponTyneNewcastle Upon Tynebrighton_on_seaBrighton on Seaapple_releases_new_ipadApple Releases New iPad7-food-trends7 Food Trends从这张表能读出三条关键行为数字开头会被完整保留7-food-trends中的7不会被吞掉输出首词 7 Food Trends专有大小写词不随规则被纠正ipad最终输出为 iPad而不是被粗暴首字母大写成 Ipad介词/连词按位置决定大小写brighton_on_sea→ BrightononSea中部的on保持小写。安装与基础用法作为一个可通过 npm 单独安装的独立子包directus/format-title 的安装命令如下npm install directus/format-title从 packages/format-title/package.json 可以看到该包是 ESMtype: module入口为./dist/index.js构建工具使用 tsdown因此引入方式为 ES importformatTitle(string, [separator]); formatTitle(snowWhiteAndTheSevenDwarfs); // Snow White and the Seven DwarfsformatTitle同时支持具名导出与默认导出两种方式见 src/index.ts 末尾方便不同引入风格import formatTitle, { formatTitle as namedFormatTitle } from directus/format-title; // 两者指向同一个实现separator 参数自定义切分字符第二个可选参数separator是一个正则表达式用来控制在哪些字符处把字符串拆成单词。按 README 说明其默认值为/\s|-|_/g也就是同时支持按空白、连字符、下划线三种字符切分formatTitle(hello_world); formatTitle(hello-world); formatTitle(hello world); // 三者均输出 Hello World默认值对应的实现可以在 src/index.ts 的函数签名 中看到export function formatTitle(title: string, separator: RegExp new RegExp(\\s|-|_, g)): string { return decamelize(title).split(separator).map(capitalize).map(handleSpecialWords).reduce(combine); }传入自定义正则即可扩展切分字符集例如希望额外按/或.切分formatTitle(admin/users/manage, /[/\s\-_.]/g); // 需要说明切分后每个片段都会经过独立的大小写判定值得强调的是camelCase/PascalCase 并不是靠 separator 拆开的而是由管线最前端的decamelize统一先转换为下划线形式详见下文随后才交给separator正则切分。这意味着即使你传入了自定义 separatorcamelCase 的拆分能力依然有效。工作原理五步处理管线的源码级拆解formatTitle的实现只有一行却是一条非常清晰的数据处理管线src/index.ts#L6-L8decamelize → split(separator) → map(capitalize) → map(handleSpecialWords) → reduce(combine)第一步decamelize —— 拆开驼峰并把所有字符转小写utils/decamelize.ts 用两条正则完成驼峰拆分随后统一.toLowerCase()export function decamelize(string: string): string { return string .replace(/([a-z\d])([A-Z])/g, $1_$2) // 小写/数字 大写之间补下划线 .replace(/([A-Z])([A-Z][a-z\d])/g, $1_$2) // 连续大写后接大写小写处补下划线 .toLowerCase(); }第一条正则处理snowWhite→snow_White这类小写/数字后紧跟大写的边界第二条正则处理连续缩写场景例如iPhoneXSupport中的XSupport边界可正确拆出IPHONE_X_SUPPORT随后统一转小写。因为拆完后已经全部转为小写后续的切分与大小写判定就可以基于统一的小写词根进行。第二步split(separator) —— 按默认正则切词拆完驼峰并转小写后的字符串通过String.prototype.split以默认正则/\s|-|_/g切成单词数组供后续逐词处理。第三步capitalize —— 每个词首字母大写utils/capitalize.ts 只做一件事把每个词的首字母转大写、其余保持不变export function capitalize(word: string): string { return word.charAt(0).toUpperCase() word.substring(1); }此时snow_white_and_the_seven_dwarfs已被拆成词并逐词大写为Snow、White、And、The……但这还是全首字母大写版本需要下一步按标题规范修正小词。第四步handleSpecialWords —— APA Title Case 的核心判定这是整个包的灵魂所在。utils/handle-special-words.ts 对每个词按以下优先级依次判定专有大小写词special-case命中直接返回原样遍历specialCase列表只要不区分大小写地命中如输入ipad命中原词iPad就返回词表中书写形式即输出iPad而非Ipad首字母缩写acronym命中则整体大写若str.toUpperCase()存在于acronyms列表中如api、sql、pdf返回全大写形式位于标题首位/末位的词即使它是介词或连词也保持当前已大写形式返回对应 README 中除非它们位于标题开头或结尾的规则长度 ≥ 4 的词保持大写因此Seven、Dwarfs这类 4 个字母以上的主要词汇不会被误伤介词表命中转为小写返回连词表命中转为小写返回冠词表命中转为小写返回兜底其余情况保持首字母大写后的形态。第五步combine —— 用空格拼接回完整标题utils/combine.ts 是最朴素的一步把处理完的单词用单个空格连接export function combine(acc: string, str: string): string { return ${acc} ${str}; }支撑判定的五大词表常量上述判定逻辑不写死在代码里而是高度数据化地维护在 src/constants 目录下便于持续扩充词表文件内容说明覆盖量以仓库实际内容为准articles.ts英语冠词3 个a、an、theconjunctions.ts连词and、but、or、that、when等 20 个prepositions.ts介词含复合介词of、on、in front of、with respect to等 60 个acronyms.ts输出时应保持全大写的缩写API、SQL、HTML、PDF、URL、2FA等 80 个special-case.ts有独特大小写拼写方式的专有名词McDonalds、iPhone、YouTube、PostgreSQL、macOS等 40 个README 特别举出的例子正是这些表存在的意义这个包里包含一份使用某种特殊大小写的词汇清单例如 McDonalds、iPhone 和 YouTube。 例如apple_releases_new_ipad之所以输出Apple Releases New iPad正是因为处理ipad时命中了 special-case.ts 中的iPad从而保留厂商官方的拼写方式。同时注意判定顺序上 special-case 优先于 acronym例如sql若同时出现在两表special-case 先命中则不再进入 acronym 分支当前词表中二者并不冲突但顺序设计保证了扩展安全性。从源码结构看这几个词表均为默认导出数组常量若要为本仓库之外的项目扩展词表可直接 fork 后追加条目无需改动判定逻辑本身。测试与工程化保障这个包的测试由 vitest 驱动主测试文件 src/index.test.ts 以输入→期望输出的二维数组形式组织用例并逐条生成测试名const tests: [string, string][] [ [snowWhiteAndTheSevenDwarfs, Snow White and the Seven Dwarfs], [NewcastleUponTyne, Newcastle Upon Tyne], [brighton_on_sea, Brighton on Sea], [apple_releases_new_ipad, Apple Releases New iPad], [7-food-trends, 7 Food Trends], ];此外还有针对各内部工具与常量的单测constants.test.ts校验词表数据capitalize.test.ts、combine.test.ts、decamelize.test.ts、handle-special-words.test.ts则分别锁定四个工具函数的边界行为。在 package.json 的 scripts 中可用pnpm testvitest run执行全部测试用pnpm build完成tsdown src/index.ts --dts的打包同时生成类型声明。版本与许可该包当前版本为 13.0.0以 package.json 的 version 字段 为准作者为 Directus 核心开发者采用 MIT License详见仓库内的 license 文件。作为 Directus 开源 monorepo 的一个独立发布包你既可以随 Directus 生态一并使用也可以作为通用字符串工具单独安装到任意 JS/TS 项目中。适合的应用场景小结综合 README 与源码directus/format-title 最适合用在以下位置字段名/集合名的人性化展示把数据库里的snowWhiteAndTheSevenDwarfs变为界面标题 Snow White and the Seven DwarfsURL slug 与文件名美化如 README 示例中的7-food-trends→ 7 Food Trends以及连字符/下划线/空格混排文本的归一化配置键名、枚举值等机器标识符的阅读化输出借助内置的 acronym 与 special-case 词表apple_releases_new_ipad这类包含品牌词的输入也能得到品牌官方拼写任何需要主要词大写、冠词介词连词小写的标题排版需求判定规则完整对齐 APA Title Case可直接复用。使用时只需记住一个 API 签名formatTitle(string, separator?)与一个默认行为camelCase 由内置decamelize先行拆解空白/连字符/下划线由默认正则/\s|-|_/g切分最终输出遵循首尾词大写、3 字以内虚词小写、4 字以上实词大写、缩写与专有名词特殊处理的规范结果。【免费下载链接】directusThe flexible backend for all your projects Turn your DB into a headless CMS, admin panels, or apps with a custom UI, instant APIs, auth more.项目地址: https://gitcode.com/GitHub_Trending/di/directus创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/10/25 12:57:53

CANN/ge内存查询模型信息API

aclmdlBundleQueryInfoFromMem 【免费下载链接】ge GE(Graph Engine)是面向昇腾的图编译器和执行器,提供了计算图优化、多流并行、内存复用和模型下沉等技术手段,加速模型执行效率,减少模型内存占用。 GE 提供对 PyTor…

2026/10/30 5:43:12

Decision: Static site on one server

Decision: Static site on one server 【免费下载链接】US.KG Free domain registration and practical DNS learning resources for everyone. 项目地址: https://gitcode.com/GitHub_Trending/us/US.KG Context The site publishes documentation and has no account…

2026/10/30 9:37:07

MATLAB LSTM回归预测实战:从数据准备到贝叶斯调参完整指南

简介:这份资源面向需要掌握时序数据回归预测的机器学习初学者与工程人员,提供基于MATLAB实现的长短期记忆神经网络(LSTM)完整代码与配套说明。LSTM作为循环神经网络的变体,通过门控单元与记忆单元有效捕捉序列中的长期…

2026/10/30 9:37:07

Paperclip:面向 React 的轻量级 AI 智能体运行时框架

1. “Paperclip”不是回形针:一个被误读的开源项目代号最近在几个技术社区里频繁看到“paperclip”这个词,尤其和 Node.js、React、AI agents 这些关键词一起出现。有人以为是某个新出的 UI 组件库,有人猜是 React 的 Hooks 封装工具&#xf…

2026/10/30 9:37:07

Redis生产环境部署与优化全指南

1. Redis安装部署核心思路解析Redis作为当前最流行的内存数据库之一,其安装部署过程看似简单却暗藏诸多技术细节。根据我多年运维经验,完整的Redis部署需要经历源码获取、环境准备、编译安装、配置调优和服务管理五个关键阶段。不同于简单的apt-get inst…

2026/10/30 9:37:07

Oracle Data Pump expdp/impdp核心原理与实战避坑指南

简介:这是一款面向Oracle数据库管理员、运维工程师及Java开发者的图形化导入导出桌面工具,专为简化expdp/impdp等命令行操作而设计,尤其适合不熟悉PL/SQL或命令行环境的中级技术人员快速完成数据迁移、定期备份与故障恢复等核心任务。资源包共…

2026/10/30 9:37:07

Cosmos-Predict2 2B vs 14B:你的显卡该选哪款AI世界模型?

人工智能媒体生成本地部署 【免费下载链接】Cosmos-Predict2 项目地址: https://ai.gitcode.com/hf_mirrors/Comfy-Org/Cosmos-Predict2 点击查看 免费下载 Cosmos-Predict2 是 NVIDIA 开源 AI 世界模型面向 ComfyUI 的封装模型文件库,分为 2B 和 14B 两…

2026/10/30 9:32:06

MySQL 后台注入靶场源码:登录绕过、联合查询与数字型盲注实战

简介:这是一套面向 Web 安全初学者与渗透测试练习者的漏洞网站源码,围绕后台注入场景提供可本地或空间部署的测试环境,适合用来理解注入成因、验证防御思路并开展靶场演练。压缩包共 844 个文件,约 4.95MB,以 291 个 P…

2026/10/29 17:05:52

全国计算机二级C语言真题PDF高效刷题指南

简介:这份PDF是全国计算机二级C语言考试的试题与答案解析,专为备考二级C语言的考生准备。内容涵盖C语言特点与设计理念、程序基本组成单位、main函数执行流程、函数嵌套调用规则、标识符命名规范、整型实型字符型数据类型、八进制十六进制数合法形式、运…

2026/10/29 17:06:02

requests+BeautifulSoup:爬虫抓取h1标题的入门实战指南

简介:一份以实战为导向的Python爬虫入门资源,面向具备基本编程基础、希望快速掌握网络数据抓取的初学者,可解决从零编写简单爬虫的常见困惑。实例以requests库发送HTTP请求、BeautifulSoup解析HTML文档,完整演示从网页中提取 标题…

2026/10/29 17:06:13

递推最小二乘参数辨识MATLAB编程:二阶系统与渐消记忆实现

简介:这是一篇面向控制系统、信号处理与机器学习等领域学习者的最小二乘参数辨识程序说明文档。资源共包含一个docx格式文档,压缩包大小七十八KB,内容围绕递推最小二乘算法和渐消记忆最小二乘算法展开:先构造一个极点位于单位圆内…

2026/10/30 0:00:46

NCP1342高频准谐振反激控制器:从设计约束到验收的完整方案

简介:NCP1342 高频准谐振反激控制器应用介绍译文文档,面向电源设计工程师、硬件研发人员及开关电源学习者,帮助读者跨越英文原版资料的语言门槛,系统理解这款高集成度 QR Flyback 控制器的设计要点。文档围绕芯片核心特性展开&…

2026/10/30 0:00:46

NCP1342准谐振反激电源设计:从选型到验收的全流程解析

简介:这份文档面向电源设计工程师与开关电源学习者,系统梳理NCP1342高频准谐振反激控制器的应用要点,帮助读者快速理解这款高集成度离线电源变换器控制芯片的工作机制与设计方法。内容涵盖芯片核心特性、引脚功能定义、电气特性参数表、最大额…

2026/10/30 0:00:46

Web系统自动登出机制设计与实现全解析

1. 系统自动登出机制的设计初衷在各类Web应用和后台管理系统中,自动登出功能早已成为标配。这个看似简单的功能背后,实际上涉及用户安全、资源管理和体验优化的多重考量。作为从业十多年的老开发,我见过太多因为登出逻辑设计不当导致的安全事…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑