javascript - 如何在第二个下划线后剪切字符串?

标签 javascript string algorithm

我正在接收对象中的文件列表,我只需要在表格中显示文件名及其类型。 所有文件都以这种格式从服务器返回: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];
};

我想知道是否有更优雅的方法可以不使用循环来解决问题。

最佳答案

您可以使用 replacesplit,我们将字符串替换为从字符串开头开始的第二个 _ 的模式,然后我们在 . 上拆分以获取名称和类型

enter image description here

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/

相关文章:

string - 使用 ||对于 swift 中 if 语句中的多个字符串

java - 自定义字母顺序

javascript - 在用户输入时验证并在提交时验证

C# 字符串连接最佳实践

javascript - .then() 中的 Expect() - Jasmine 单元测试,AngularJS

algorithm - 动态规划寻找点的最小权重覆盖

python - 在给定时间/样本量下,频率 f1 和 f2 之间呈指数变化的正弦波

java - MergeSort 不稳定

javascript - 在 javascript 中使用反射来获取失败时测试函数的名称

javascript - 带有悬停效果的 jquery 旋转木马