章节名格式 SDK
📚 关于
提供了一系列JavaScript API函数。 这些函数可以在脚本中调用,用于新建章节、分卷是自动填充名字的场景。
快速开始
javascript
// 下面【前缀】、【后缀】、【数字个数】的等号后面都可以根据自己需要进行修改
const 前缀 = "第";
const 后缀 = "章";
// 数字个数=3,效果就是 第001章;如果=4,效果就是 第0001章;
const 数字个数 = 3;
// 下面是代码逻辑
// getChapterIndex()是内置API,返回当前章节索引,从0开始
// padStart(3, "0")是数字的填充,如1,2,3,填充到3位,变成001,002,003
const 章节序号 = String(getChapterIndex() + 1).padStart(数字个数, "0");
const 最终名字 = 前缀 + 章节序号 + 后缀;
最终名字;章节信息
getChapterIndex()
获取当前要新建章节的索引位置。
javascript
getChapterIndex()javascript
const currentIndex = getChapterIndex();
console.log(`当前章节索引: ${currentIndex}`);
// 计算章节号(从1开始)
const chapterNumber = currentIndex + 1;
console.log(`正在阅读第 ${chapterNumber} 章`);返回值
Number- 当前要新建章节的索引值(从0开始)
getLastChapterName()
获取最后一个章节的名称。
javascript
getLastChapterName()javascript
const lastChapter = getLastChapterName();
if (lastChapter) {
console.log(`最后章节: ${lastChapter}`);
} else {
console.log('没有找到章节');
}返回值
String | null- 最后一个章节的名称,如果没有章节则返回null
书籍信息
getBookName()
获取当前书籍的名称。
javascript
getBookName()javascript
const bookName = getBookName();
console.log(`书籍名: ${bookName}`);返回值
String- 书籍名称
分卷信息
getCurrentGroupName()
获取当前分卷的名称。
javascript
getCurrentGroupName()javascript
const groupName = getCurrentGroupName();
if (groupName) {
console.log(`当前分卷: ${groupName}`);
} else {
console.log('当前没有分卷');
}返回值
String | null- 当前分卷的名称,如果没有分卷则返回null
getCurrentGroupIndex()
获取当前分卷的索引位置。
javascript
getCurrentGroupIndex()javascript
const groupIndex = getCurrentGroupIndex();
console.log(`当前分卷索引: ${groupIndex}`);
// 显示组进度
const groupName = getCurrentGroupName();
console.log(`${groupName} (第${groupIndex + 1}卷)`);返回值
Number- 当前分卷的索引值(从0开始)
⚠️注意
getCurrentGroupName()返回的是当前所在分卷的索引,从0开始,如果当前用于新建分卷,分卷序号可能应该+2。
章节列表
getCurrentGroupChapterNameList()
获取当前分卷中所有章节的名称列表。
javascript
getCurrentGroupChapterNameList()javascript
const chapterNames = getCurrentGroupChapterNameList();
console.log('当前分卷的章节列表:');
chapterNames.forEach((name, index) => {
console.log(`${index + 1}. ${name}`);
});
// 生成章节导航
function createGroupNavigation() {
const chapters = getCurrentGroupChapterNameList();
return chapters.map((name, index) =>
`<li><a href="#chapter-${index}">${name}</a></li>`
).join('');
}返回值
Array<String>- 包含当前分卷中所有章节名称的数组,如果没有分卷则返回空数组
getCurrentNameList()
获取名称列表:
- 如果当前是要新建分卷,这里则是已有的分卷名列表;
- 如果当前是要新建章节,则则是当前要新建分卷下已存在的章节名列表。
javascript
getCurrentNameList()javascript
const allChapters = getCurrentNameList();
console.log(`总共有 ${allChapters.length} 个章节`);
// 创建完整的目录
allChapters.forEach((name, index) => {
console.log(`章节 ${index + 1}: ${name}`);
});
// 搜索章节
function searchChapter(keyword) {
const chapters = getCurrentNameList();
return chapters.filter(name =>
name.toLowerCase().includes(keyword.toLowerCase())
);
}返回值
Array<String>- 名称数组
最佳实践
⚠️ 注意事项
- 索引值从0开始计数,显示给用户时通常需要+1
- 部分函数可能返回null,请务必进行空值检查
- 分卷功能是可选的,不是所有书籍都有分卷结构
javascript
/**
* 下一章节名生成器
* 根据现有章节列表,自动生成下一个符合格式的章节名
*/
class ChapterNameGenerator {
constructor() {
// 匹配 "第xxx章" 格式的正则表达式
// xxx可以是数字,也可以是有0填充的数字
this.chapterPattern = /^第(\d+)章/;
}
/**
* 生成下一章节名字
* @returns {string} 新的章节名,格式为"第xxx章"
*/
generateNextChapterName() {
try {
// 获取所有章节名称列表
const allChapters = getCurrentNameList();
if (!allChapters || allChapters.length === 0) {
console.log('📝 没有找到现有章节,生成第一章');
return '第1章';
}
// 从最后一章开始往前遍历,找出最后一个符合格式的章节
const lastValidChapter = this.findLastValidChapter(allChapters);
if (lastValidChapter) {
const nextChapterNumber = lastValidChapter.number + 1;
const newChapterName = this.formatChapterName(
nextChapterNumber,
lastValidChapter.hasLeadingZeros,
lastValidChapter.totalDigits,
);
console.log(`✅ 找到符合格式的章节: ${lastValidChapter.name}`);
console.log(`🎯 生成下一章节名: ${newChapterName}`);
return newChapterName;
} else {
console.log('⚠️ 没有找到符合"第xxx章"格式的章节,生成第一章');
return '第1章';
}
} catch (error) {
console.error('❌ 生成章节名时出错:', error.message);
return '第1章'; // 默认返回第1章
}
}
/**
* 从章节列表中找出最后一个符合格式的章节
* @param {string[]} chapters - 章节名称列表
* @returns {Object|null} 符合格式的章节信息,包含名称、数字、是否有前导零等
*/
findLastValidChapter(chapters) {
// 从后往前遍历章节列表
for (let i = chapters.length - 1; i >= 0; i--) {
const chapterName = chapters[i];
const match = this.chapterPattern.exec(chapterName);
if (match) {
const numberStr = match[1]; // 提取的数字字符串
const number = parseInt(numberStr, 10); // 转换为数字
const hasLeadingZeros = numberStr.length > 1 && numberStr.startsWith('0');
const totalDigits = numberStr.length;
return {
name: chapterName,
number: number,
numberStr: numberStr,
hasLeadingZeros: hasLeadingZeros,
totalDigits: totalDigits,
index: i,
};
}
}
return null;
}
/**
* 格式化章节名称,保持与原有章节相同的数字格式
* @param {number} chapterNumber - 章节序号
* @param {boolean} hasLeadingZeros - 原章节是否有前导零
* @param {number} totalDigits - 原章节数字的总位数
* @returns {string} 格式化后的章节名
*/
formatChapterName(chapterNumber, hasLeadingZeros, totalDigits) {
let numberStr;
if (hasLeadingZeros && totalDigits > 1) {
// 如果原章节有前导零,保持相同的位数格式
numberStr = chapterNumber.toString().padStart(totalDigits, '0');
} else {
// 否则使用普通数字格式
numberStr = chapterNumber.toString();
}
return `第${numberStr}章`;
}
}
// 简化的调用函数
function getNextChapterName() {
const generator = new ChapterNameGenerator();
return generator.generateNextChapterName();
}
getNextChapterName();📝 更新日志
- 2025年8月21日 - 初始版本,包含基础API函数
🤝 问题反馈
如果您发现文档中的错误或有改进建议,欢迎加入QQ群反馈!
