【问题标题】:Extract id from generated file name从生成的文件名中提取 id
【发布时间】:2022-11-15 09:48:35
【问题描述】:

我正在尝试从生成的文件名中提取用户 ID。首先我把它们写成:

id_timestamp.ext

现在我需要读取列表并从文件列表中过滤出仅具有 id 拥有文件的特定用户。

我认为做

substring(fileName, id.length)

是靠不住的。

有没有办法做到这一点?我应该使用正则表达式吗?

【问题讨论】:

  • 什么是id?你对 substring 操作的结果做了什么?

标签: javascript


【解决方案1】:

您可以使用正则表达式来解决您的问题。

const filename = 'id_timestamp.ext';
const regex = /^(w+)_timestamp.ext$/;
const id = filename.match(regex)[1];

这是通过将 id 部分与捕获组匹配来实现的。该组可以用作 id,因为它只包含 id 部分。

或者,您可以使用 indexOf 的组合来查找下划线的位置,并使用 substring 来获取该位置的第一部分。

const filename = 'id_timestamp.ext';
const id = filename.substring(0, filename.indexOf("_"))

如果 id 始终具有相同的长度,那么您甚至可以摆脱 indexOf 部分。

【讨论】:

    【解决方案2】:

    假设你建立了你的文件名

    const filename = `${id}_${timestamp}.ext`;
    

    并假设您的 id 和时间戳不包含时间戳(以便生成的文件名明确),您可以通过以下方式检查文件是否属于某个用户

    filename.startsWith(`${id}_`)
    

    请注意,您需要包含下划线,filename.startsWith(id) 会导致误报,因为您的 ID 不太可能没有前缀。

    【讨论】:

      【解决方案3】:

      如果您的id 将始终是第一个并且您生成的是id_timestamp.ext 模式 我建议使用以下方法从文件名中提取 id

      const fileName = `1234_file.txt`;
      const arr = fileName.split("_");
      const id = arr[0];
      
      console.log(id) // "1234"
      

      【讨论】:

        【解决方案4】:

        我可能把这个说得太简单了,但是......

        getId = function(s){ s = s.substring(this,s.lastIndexOf('.')); s = s.substring(this,s.lastIndexOf('_')); return s; }

        如果所需的格式保持不变,似乎可以解决问题。 s.substring(this,s.lastIndexOf('.') 隔离扩展和 .lastIndexOf('_') 将搜索字符串中剩余的最后一个 _ 出现。

        这是可回收功能的缩小版

        getId = function(s){ return s.substring(this,s.substring(this,s.lastIndexOf('.')).lastIndexOf('_')); }

        如果这是在加载时发生的,这里是一个直接的

        filename.substring(this,filename.substring(this,filename.lastIndexOf('.')).lastIndexOf('_'));

        以下任一功能选项的示例

        var filenameA = 'id_timestamp.ext';

        var filenameB = 'testID_123654789.ext_';

        getID(filenameA)getID(filenameB)

        结果

        文件名A 结果:ID

        文件名B结果:测试编号

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-12-15
          • 2018-09-02
          • 2021-08-31
          • 2015-03-19
          相关资源
          最近更新 更多