网站首页 > 开源技术 正文
下面是一个用 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"
代码解析
输入校验:
- 确保 fileName 是一个非空字符串。
- 确保 newExtension 是一个非空字符串。
- 如果输入无效,抛出错误以提醒调用者。
- 处理无后缀名的情况:
- 如果文件名中没有 .,说明没有后缀名。此时直接将新后缀名追加到文件名后面。
替换逻辑:
- 使用 lastIndexOf('.') 找到最后一个 . 的位置。
- 使用 slice 方法提取文件名的基础部分(即去掉原后缀的部分)。
- 拼接新的后缀名,生成最终结果。
示例输出:
输入 "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"
总结
该函数设计简单、健壮,能够处理各种常见的文件名替换场景。如果你有其他需求(例如支持多后缀名的复杂替换),可以进一步扩展逻辑。
- 上一篇: 项目中对react-native-mmkv库的封装和使用笔记
- 下一篇:已经是最后一篇了
猜你喜欢
- 2025-04-26 项目中对react-native-mmkv库的封装和使用笔记
- 2025-04-26 宝塔Nginx跨域配置教程
- 2025-04-26 WebRTC实现的视频会议流程设计和工程架构分享
- 2025-04-26 React Native终极资源库:35k+星标的开发者宝典
- 2025-04-26 mac 如何通过命令查看当前的ip
- 2024-08-24 html标签中元素显示模式(html块元素标签)
- 2024-08-24 TS 的一些常用知识点总结和使用说明
- 2024-08-24 使用js 封装一个根据某参数如userId去重的函数
- 2024-08-24 原生js有生命周期吗?及怎么使用?(原生js常用的方法)
- 2024-08-24 react native 封装一个通用的NavBar 导航栏笔记
你 发表评论:
欢迎- 04-26使用TypeScript封装替换文件名的后缀名函数笔记
- 04-26项目中对react-native-mmkv库的封装和使用笔记
- 04-26宝塔Nginx跨域配置教程
- 04-26WebRTC实现的视频会议流程设计和工程架构分享
- 04-26 React Native终极资源库:35k+星标的开发者宝典
- 04-26mac 如何通过命令查看当前的ip
- 04-26GP丨今年的圣诞树,已经被设计师给玩坏了?
- 04-26HTML5新年主题模板(附PSD下载)
- 最近发表
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)