@danielhaim/titlecaser

中文文档
1.8.25发布于 2026/07/21Apache-2.0TypeScriptESM + CJS零依赖近 30 天下载 4132

在支持多种样式指南和广泛的定制选项的情况下,将文本转换为标题大小写的一个强大的用途.

中文使用文档
文档目录33 节
  1. 链接
  2. 导言
  3. 关键特性
  4. 多层编辑引擎
  5. 上下文缩略语和缩略语
  6. 结构词汇规范化
  7. 字典-维基百科中的相关条目: 句子案
  8. 高级连字符和化合物处理
  9. 多选项处理
  10. HTML- 安全 & CMS- Ready
  11. 运行时间、 架构和构建支持
  12. 快速启动
  13. 核心用途
  14. 编辑-分级转换(AP示例)
  15. 自定义术语规范化
  16. 精确的词组替换
  17. 聪明的引文
  18. 白空间正态化
  19. 标题卡塞尔配置
  20. 词典简介
  21. 浏览器使用
  22. 真实世界 DOM 示例
  23. API 参考
  24. 构造器
  25. 选项
  26. 安全选项
  27. 方法
  28. 测试范围
  29. 资源
  30. 报告错误
  31. 捐款
  32. 许可证
  33. 更改日志

标题

npm version Downloads GitHub

用于执行的 JavaScript 的样式指南 - 认识标题大小写引擎 AP 计划, (中文(简体) ), 亚太, (中文(简体) ), 芝加哥, (中文(简体) ), 纽约T, (中文(简体) ), 维基百科,以及 英国 样式带有上下文缩写分解,词典支持的实体检测,运行时验证,以及被整理的域名名.

TitleCaser Demo



导言

TitleCaser是用于生产出版系统的定型,风格-指向-有意识的标题外壳引擎. 它执行主要编辑标准,采用规则驱动的资本化逻辑,包括上下文缩写分化、复合处理、占有式正常化、有敏锐感的处理、字典辅助实体检测,以及在整个营销、学术界、商业、金融、地理、法律、国防、媒体、名称和技术中执行解析域名词汇.

它的多路口处理架构在支持自定义覆盖,精确的短语保存,受控的词汇执行,以及用于运行时间输入的防御性验证层的同时,确保了决定性输出. 为Node.js和浏览器环境所设计,TitleCaser将清洁地集成到CMS管道中,建立系统,以及自动化编辑工作流程中需要精度和可重复性.


关键特性

多层编辑引擎

内建规则系统 AP 计划, (中文(简体) ), 亚太, (中文(简体) ), 芝加哥, (中文(简体) ), 纽约T, (中文(简体) ), 维基百科 (判决案件)和 英国 样式。 每个样式都应用自己的逻辑来表示小字,连字符复合物,占有物,结肠资本化,和缩写处理,产生一致的可重复输出.

上下文缩略语和缩略语

将区域缩略语与同名小写单词区分开来,使用姿势和周围的词Heuristics.

例如:

"It’s up to us in the US military to decide."
→ "It’s Up to Us in the US Military To Decide."

"us-uk-led coalition"
→ "US-UK-Led Coalition"
  • 支持美国、联合王国、欧盟、美国(虚构和倒置表格)
  • 手接连字符化合物(美国-背面、美国-联合王国-铅)
  • 在括号和逗号分隔上的工作
  • 刑满前的缩略语
  • 避免在较长的单词中出现假阳性

结构词汇规范化

包括各种品牌、技术、地理、商业、营销、国防、学术界、金融、法律、媒体、名称和娱乐领域的规范化规则.

  • 品牌和产品外壳GOOgle, (中文(简体) ), nodejs, (中文(简体) ), iphone → Google, (中文(简体) ), Node.js, (中文(简体) ), iPhone(中文(简体) )
  • 媒体、娱乐和平台名称fox news, (中文(简体) ), cnn international, (中文(简体) ), apple music → Fox News, (中文(简体) ), CNN International, (中文(简体) ), Apple Music(中文(简体) )
  • 技术和开发者术语aws, (中文(简体) ), github, (中文(简体) ), devops, (中文(简体) ), ddos → AWS, (中文(简体) ), GitHub, (中文(简体) ), DevOps, (中文(简体) ), DDoS(中文(简体) )
  • 名称、占有物和化合物donald duck, (中文(简体) ), o'connor, (中文(简体) ), louis-iv → Donald Duck, (中文(简体) ), O’Connor, (中文(简体) ), Louis-IV(中文(简体) )
  • 统一码和国际品牌外壳(skoda → Škoda(中文(简体) )
  • 运行时自定义名词覆盖
  • 精确短语替换

字典-维基百科中的相关条目: 句子案

维基百科模式使用词典支持的部分语音数据,给定名和家族名列表,整理出合适的短语,并进行上下文评分来避免过度校正用户意图.

  • 保存可能的名称( E)Donald Duck, (中文(简体) ), John Smith, (中文(简体) ), Maeve O’Connor(中文(简体) )
  • 保护已知的媒体和品牌短语(BBC News, (中文(简体) ), Sky News, (中文(简体) ), The Lincoln Project(中文(简体) )
  • 小写以文章为首的普通短语(The Public Event → the public event(中文(简体) )
  • 避免将每个资本字当作适当的名词
  • 提供特定规格的进口 lite 财务报告和审定财务报表 full 建立词典

高级连字符和化合物处理

具有特定风格规则的连字符化合物智能处理:

  • 多连字符化合物US-UK-Led Coalition(中文(简体) )
  • 风格特异性复合规则(AP vs Chicago)
  • 瞬间和瞬间正常化
  • 缩略语- 第一个复合逻辑
  • 化合物内的罗马数字
  • 化合物内的品牌外壳保存

多选项处理

用于稳定处理复杂输入的分层多通道处理:

  • 投入正常化(间距和 <br> 处理)
  • 基于托肯的白空保留转换管道
  • 样式感知外壳通过
  • 缩略语分辨率通过
  • 短字更正通过
  • 最后背景更正通过
  • 可选智能引号转换
  • 精确的短语覆盖过关

HTML- 安全 & CMS- Ready

为整合到出版工作流程,CMS管道,以及自动化编辑系统而设计.

  • 保留 <br> 标记
  • 将结号周围的间隔规范化 + <br>
  • 保留闪存和符号
  • 安全处理过多的空地
  • 编辑器安全实时使用的可选空白区保存
  • 对脚本标记、不安全控制、bodi控制、emoji、特殊字符进行防御性验证,并允许 HTML 标记

标题Caser不是HTML消毒器。 它的验证层旨在拒绝或允许外壳之前所配置的输入模式,同时仍然支持有意通过安全标记等的编辑工作流程 <br>。 。 。 .

运行时间、 架构和构建支持

AMD/浏览器构建扩展 String.prototype.toTitleCase() 用于客户端环境中的直接字符串使用.

  • 节点.js(ES模块)
  • 浏览器( 原型扩展通过 AMD 构建)
  • AMD 发行架构
  • CLI 构建和测试脚本
  • 结构化公用事业 src/utils/*
  • 结构数据 src/data/*
  • 专门 TitleCaserConfig 用于重用运行时间配置的 API

快速启动

npm install @danielhaim/titlecaser
import { TitleCaser } from '@danielhaim/titlecaser';

const titleCaser = new TitleCaser({ style: 'ap' });

titleCaser.toTitleCase('inside the race to secure ai systems before the next cyberattack'); // → "Inside the Race To Secure AI Systems Before the Next Cyberattack"
titleCaser.toTitleCase('how hospitals prepare for ddos attacks on aws'); // → "How Hospitals Prepare for DDoS Attacks on AWS"
titleCaser.toTitleCase('what the us military learned from nato drills'); // → "What the US Military Learned From NATO Drills"

核心用途

编辑-分级转换(AP示例)

处理品牌正常化、缩写、连字符、占有和结肠规则:

import { TitleCaser } from '@danielhaim/titlecaser';

const titleCaser = new TitleCaser({ style: 'ap' });

titleCaser.toTitleCase(
  "inside a high-profile, long-term plan for e-commerce growth"
); // → "Inside a High-Profile, Long-Term Plan for E-Commerce Growth"

自定义术语规范化

titleCaser.addReplaceTerm('cms', 'CMS');
titleCaser.toTitleCase('cms audit after hospital breach'); // → "CMS Audit After Hospital Breach"

精确的词组替换

titleCaser.addExactPhraseReplacements([
  { 'public records request': 'Public Records Request' }
]);

titleCaser.toTitleCase('inside the public records request that changed city hall'); // → "Inside the Public Records Request That Changed City Hall"

聪明的引文

const tc = new TitleCaser({
  style: 'ap',
  smartQuotes: true
});

tc.toTitleCase('"we are not ready," says former nato commander'); // → “We Are Not Ready,” Says Former NATO Commander

白空间正态化

默认启用白空间正常化 .

默认情况下, TitleCaser 将连续的白空间和指向和后向空间的修饰崩溃 :

const tc = new TitleCaser({ style: "ap" });

tc.toTitleCase("   the   quick   brown   fox   "); // → "The Quick Brown Fox"

对于必须保留间隔的实时编辑器或环境,取消正常化:

const tc = new TitleCaser({
  style: "ap",
  normalizeWhitespace: false
});

tc.toTitleCase("   the   quick   brown   fox   "); // → "   The   Quick   Brown   Fox   "

当正态白空间为假时 :

  • 保持内部间隔
  • 铅 -- -- 拖入的白空间得到保留
  • 新行和标签保存
  • 只有字母外壳被改变

这种行为允许安全地整合到实时编辑器中,而不会在正常化被禁用时意外的裁剪或光标不稳定(参见 问题17 (供讨论).

标题卡塞尔配置

使用 TitleCaserConfig 如果您想要先验证和再使用一个完整的配置对象,然后将其传递到 TitleCaser。 。 。 .

import { TitleCaser, TitleCaserConfig } from '@danielhaim/titlecaser';

const config = new TitleCaserConfig({
  style: 'wikipedia',
  minTitleChars: 1,
  maxTitleChars: 400,
  dictionaryProfile: 'full',
  allowEmojis: true,
  allowSpecialCharacters: true,
  normalizeQuotes: true,
  normalizeWhitespace: true,
  ignoreList: ['internal-code-name'],
  phraseReplacementList: {
    'open source initiative': 'Open Source Initiative'
  },
  security: {
    allowHtml: true,
    allowedHtmlTags: ['br'],
    rejectScriptTags: true,
    rejectEventHandlers: true,
    rejectControlCharacters: true,
    rejectBidiControls: true
  }
});

const titleCaser = new TitleCaser(config.toTitleCaserOptions());

titleCaser.toTitleCase('the report cited fox news after the public event');
// → "The report cited Fox News after the public event"

minTitleLength 财务报告和审定财务报表 maxTitleLength 被支持的别名用于 minTitleChars 财务报告和审定财务报表 maxTitleChars。 。 。 .

词典简介

词典配置控制用于词典支持的决定的词典数据。 默认软件包导入指向 full 构建兼容性。 要减少编译的捆绑大小,请导入 lite 切入点而不是只依赖运行时间 dictionaryProfile 选项.

import { TitleCaser as LiteTitleCaser } from '@danielhaim/titlecaser/lite';
import { TitleCaser as FullTitleCaser } from '@danielhaim/titlecaser/full';
简介说明
lite更小的建筑有被整理的正字法,名称,品牌,媒体实体,缩写和域名. 它不包括由WordNet衍生出的部分相声词典,因此维基百科的句子-案例检测不够积极.
full完整的词典辅助构建,包含完整的WordNet衍生出名词,动词,形容词,和副词数据;默认.

词典被与软件包捆绑在一起,不执行API调用. 运行时间 dictionaryProfile 仍然为默认构建接受,但运行时选择无法删除已编译为捆绑的数据.

浏览器使用

<script src="./path/to/dist/full/titlecaser.amd.js"></script>
<!-- or -->
<script src="./path/to/dist/lite/titlecaser.amd.js"></script>
const output = "inside the race to secure ai systems before the next cyberattack"
  .toTitleCase({ style: 'apa' });

console.log(output); // → "Inside the Race to Secure AI Systems Before the Next Cyberattack"

真实世界 DOM 示例

在出版工作流程中自动使编辑标题正常化:

<h2>how nato logistics depend on rail lines, ports, and fuel depots</h2>
<h2>inside the race to secure ai systems before the next cyberattack</h2>
<h2>why local newspapers are turning to nonprofit ownership</h2>
function applyTitleCaseToH2Elements(options = { style: "apa" }) {
  const h2Elements = document.querySelectorAll("h2");

  h2Elements.forEach((h2) => {
    h2.innerHTML = h2.innerHTML.toTitleCase(options);
  });
}

applyTitleCaseToH2Elements();

API 参考

构造器

new TitleCaser(options)

选项

选项类型默认说明
style字符串'ap'编辑风格 : 'ap' | 'apa' | 'chicago' | 'nyt' | 'wikipedia' | 'british'
dictionaryProfile字符串'full'词典简介 : 'lite' | 'full'
smartQuotes布尔false转换直引号( E)' ")到打字卷式引用
normalizeQuotes布尔false处理前规范左/右引号字符
normalizeWhitespace布尔true折叠相继的白相间和相间相间相间相间相间相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相 设定为 false 以保留原间隔(编辑安全模式).
minTitleChars编号1字符中最小接受的输入长度
maxTitleChars编号400字符中最大接受的输入长度
allowEmojis布尔true允许输入中的 emoji 字符
allowSpecialCharacters布尔true允许在输入中配置特殊字符
neverCapitalize字符串 [][]附加的单词应保持小写( 与样式默认合并)
wordReplacementsList对象[]内部默认矩阵 { 'term': 'replacement' } 用于术语常态的对象
phraseReplacementList对象{}字符串到字符串短语替换映射
replaceTerms数组[]Tuple 风格替换列表 TitleCaserConfig
security对象默认安全政策控制 HTML, 脚本标记, 事件处理器, 控制特征, bodi, 零宽字符验证
debug布尔false处理时启用内部警告日志

安全选项

选项类型默认说明
allowHtml布尔false仅在启用时允许 HTML 外观输入
allowedHtmlTags字符串 []['br']启用 HTML 时允许的标记
rejectScriptTags布尔true拒绝 <script> 标记
rejectEventHandlers布尔true拒绝内置处理器, 如 onclick=
rejectControlCharacters布尔true拒绝不安全的控制字符
rejectBidiControls布尔true拒绝 bodi 覆盖/ 控制字符
rejectZeroWidthCharacters布尔false可选拒绝零宽字符

方法

切换到TitleCase(文本)

titleCaser.toTitleCase('inside the heat wave response'); // → "Inside the Heat Wave Response"

任期(任期、替换)

titleCaser.addReplaceTerm('cms', 'CMS');

替换( 任期)

titleCaser.removeReplaceTerm('cms');

替换术语( 术语)

titleCaser.setReplaceTerms([
  { 'cms': 'CMS' },
  { 'aws': 'AWS' }
]);

添加精确词组替换( 句子)

titleCaser.addExactPhraseReplacements([
  { 'public records request': 'Public Records Request' },
  { 'city hall': 'City Hall' }
]);

setStyle( 样式)

titleCaser.setStyle('chicago');

创建 TitleCaser Config( 配置)

import { createTitleCaserConfig } from '@danielhaim/titlecaser';

const config = createTitleCaserConfig({
  style: 'ap',
  maxTitleChars: 300
});

const titleCaser = new TitleCaser(config.toTitleCaserOptions());

测试范围

npm run test
  • 广泛的单位测试覆盖率
  • 划分AP,APA,芝加哥,NYT和维基百科的样式验证
  • 对个人帮助者的公用事业水平测试
  • 卫生和运行时间验证测试
  • 类型脚本定义测试
  • 缩略语解析边缘案例
  • 连字符边缘大小写
  • 品牌正常化
  • 维基百科词典/实体矛盾测试
  • 跨风格名称Heuristic和罕见名词陷阱覆盖

焦点测试命令 :

npm run test-ap
npm run test-apa
npm run test-chicago
npm run test-nyt
npm run test-wikipedia
npm run test-utils
npm run test-hygiene

资源

提高你写作知识和语言风格指南的有用材料。 这些资源包括各种书籍和手册,如"美国心理学会出版手册","芝加哥风格手册","AP样式手册"等,被广泛认为是文法,通俗,资本化规则的权威来源.


报告错误

如果您在使用库或演示页时遇到任何错误或问题,请在寄存器的问题跟踪器中打开一新期来报告.

在报告错误时,请提供尽可能多的细节,包括复制问题的步骤和您看到的任何错误信息. 我感谢对改进图书馆的任何贡献.


捐款

我们欢迎捐款! 请看我们的 贡献准则 详细情况.


许可证

这个项目根据Apache许可证2.0获得许可——见 自由主义 详细文件.


更改日志

见 变动情况 用于列出更改和版本历史.

版本与发布记录

@danielhaim/titlecaser 共发布 75 个版本,首次发布于 2023/04/04;过去 12 个月发布了 27 个版本。

版本发布日期距今
1.8.25latest2026/07/213 个月前
1.8.232026/07/203 个月前
1.8.222026/07/203 个月前
1.8.212026/07/203 个月前
1.8.202026/07/203 个月前
1.8.192026/07/203 个月前

关于 @danielhaim/titlecaser 的常见问题

@danielhaim/titlecaser 是什么?

在支持多种样式指南和广泛的定制选项的情况下,将文本转换为标题大小写的一个强大的用途.

如何安装 @danielhaim/titlecaser?

在项目目录运行 npm install @danielhaim/titlecaser,或使用 pnpm add / yarn add / bun add。

@danielhaim/titlecaser 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@danielhaim/titlecaser 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@danielhaim/titlecaser 可以商用吗?

@danielhaim/titlecaser 使用 Apache-2.0 许可。宽松许可:允许商业使用、修改和再分发,并附带明确的专利授权;分发时需保留许可与 NOTICE 文件,修改过的文件要注明改动。以上为概括,不构成法律意见,请以许可原文为准。

@danielhaim/titlecaser 的下载量有多少?

根据 npm 官方下载统计,@danielhaim/titlecaser 在 2026/10/11 – 2026/11/09 这 30 天内被下载 4,132 次,日均约 138 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@danielhaim/titlecaser 还在维护吗?

最新版本 1.8.25 发布于 2026/07/21(3 个月前);至今共发布 75 个版本,其中过去 12 个月发布了 27 个;首次发布于 2023/04/04。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。