我正在接收对象中的文件列表,我只需要在表格中显示文件名及其类型。
所有文件都以这种格式从服务器返回:timestamp_id_filename
。
示例:1568223848_12345678_some_document.pdf
我编写了一个剪切字符串的辅助函数。
起初,我是用 String.prototype.split()
方法做的,我用的是正则表达式,但后来又出现了问题。文件名中可以有下划线,所以那行不通,所以我需要别的东西。我想不出更好的主意。我觉得它看起来真的很蠢,而且它一直困扰着我一整天。
函数如下所示:
const shortenString = (attachmentName) => {
const file = attachmentName
.slice(attachmentName.indexOf('_') + 1)
.slice(attachmentName.slice(attachmentName.indexOf('_') + 1).indexOf('_') + 1);
const fileName = file.slice(0, file.lastIndexOf('.'));
const fileType = file.slice(file.lastIndexOf('.'));
return [fileName, fileType];
};
我想知道是否有更优雅的方法可以不使用循环来解决问题。
最佳答案
您可以使用 replace
和 split
,我们将字符串替换为从字符串开头开始的第二个 _
的模式,然后我们在 .
上拆分以获取名称和类型
let nameAndType = (str) => {
let replaced = str.replace(/^(?:[^_]*_){2}/g, '')
let splited = replaced.split('.')
let type = splited.pop()
let name = splited.join('.')
return {name,type}
}
console.log(nameAndType("1568223848_12345678_some_document.pdf"))
console.log(nameAndType("1568223848_12345678_some_document.xyz.pdf"))
关于javascript - 如何在第二个下划线后剪切字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57894447/