编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

使用TypeScript封装替换文件名的后缀名函数笔记

wxchong 2025-04-26 21:55:41 开源技术 5 ℃ 0 评论

下面是一个用 TypeScript 编写的函数,用于替换文件名的后缀名。该函数接受两个参数:原始文件名和目标后缀名,并返回替换后的新文件名。

函数实现

/**
 * 替换文件名的后缀名
 * @param fileName - 原始文件名(例如 "3098237900953751561.dwg")
 * @param newExtension - 新的后缀名(例如 "mxweb")
 * @returns 替换后的新文件名(例如 "3098237900953751561.mxweb")
 */
function replaceFileExtension(fileName: string, newExtension: string): string {
    // 检查输入是否有效
    if (!fileName || typeof fileName !== 'string') {
        throw new Error("Invalid fileName: must be a non-empty string");
    }
    if (!newExtension || typeof newExtension !== 'string') {
        throw new Error("Invalid newExtension: must be a non-empty string");
    }

    // 使用正则表达式匹配文件名的最后一部分(即后缀名)
    const lastDotIndex = fileName.lastIndexOf('.');
    if (lastDotIndex === -1) {
        // 如果没有找到后缀名,直接在文件名后添加新的后缀
        return `${fileName}.${newExtension}`;
    }

    // 替换后缀名为新的后缀名
    const baseName = fileName.slice(0, lastDotIndex); // 获取文件名的基础部分
    return `${baseName}.${newExtension}`; // 拼接新的后缀名
}

// 示例用法
const originalFileName = "3098237900953751561.dwg";
const newExtension = "mxweb";
const newFileName = replaceFileExtension(originalFileName, newExtension);
console.log(newFileName); // 输出: "3098237900953751561.mxweb"

代码解析

输入校验:

  1. 确保 fileName 是一个非空字符串。
  2. 确保 newExtension 是一个非空字符串。
  3. 如果输入无效,抛出错误以提醒调用者。
  4. 处理无后缀名的情况
  5. 如果文件名中没有 .,说明没有后缀名。此时直接将新后缀名追加到文件名后面。

替换逻辑

  1. 使用 lastIndexOf('.') 找到最后一个 . 的位置。
  2. 使用 slice 方法提取文件名的基础部分(即去掉原后缀的部分)。
  3. 拼接新的后缀名,生成最终结果。

示例输出

输入 "3098237900953751561.dwg""mxweb",输出 "3098237900953751561.mxweb"


边界情况测试

以下是一些边界情况及其预期结果:

// 测试无后缀名的文件
console.log(replaceFileExtension("file", "txt")); // 输出: "file.txt"

// 测试多个点的文件名
console.log(replaceFileExtension("archive.tar.gz", "zip")); // 输出: "archive.tar.zip"

// 测试只有后缀名的文件
console.log(replaceFileExtension(".gitignore", "txt")); // 输出: ".gitignore.txt"

// 测试空后缀名
console.log(replaceFileExtension("document.", "pdf")); // 输出: "document.pdf"

总结

该函数设计简单、健壮,能够处理各种常见的文件名替换场景。如果你有其他需求(例如支持多后缀名的复杂替换),可以进一步扩展逻辑。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表