Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用javascript解析文件名_Javascript - Fatal编程技术网

用javascript解析文件名

用javascript解析文件名,javascript,Javascript,我有如下文件名: SEM_VSE_护肤品_555001881_181002_1559_37072093.DAT SEM_VSE_安全_555001881_181002_1559_37072093.DAT SEM\U VSE\U医疗事故\U 555001881\U 181002\U 1559\U 37072093.DAT SEM_原因_555001881_181002_1414_37072093.DAT SEM_PSE_NPI_安全_555001881_181002_1412_37072093.D

我有如下文件名:

SEM_VSE_护肤品_555001881_181002_1559_37072093.DAT SEM_VSE_安全_555001881_181002_1559_37072093.DAT SEM\U VSE\U医疗事故\U 555001881\U 181002\U 1559\U 37072093.DAT SEM_原因_555001881_181002_1414_37072093.DAT SEM_PSE_NPI_安全_555001881_181002_1412_37072093.DAT

我需要去掉结尾的数字。这种情况每天都会发生,而且数字也会改变。我必须用javascript来做。问题是,我对javascript一无所知。我已经看过split和slice,我不确定这两种方法是否有效。这些文件来自政府实体,这意味着文件名可能不一致

预期产出:

SEM_VSE_护肤品

安全性

SEM\U VSE\U医疗事故

原因

SEM\u PSE\u NPI\u安全


非常感谢您的帮助

这是正则表达式的一个很好的用例。比如说,

var oldFileName = 'SEM_VSE_SKINSHARPS_555001881_181002_1559_37072093.DAT',
    newFileName;
newFileName = oldFileName.replace(/[_0-9]+(?=.DAT$)/, ''); // SEM_VSE_SKINSHARPS.DAT
这意味着在集合
-
0-9
中替换尽可能多的字符,要求替换的部分后面必须紧跟
.DAT
和字符串的结尾


如果您还想去除
.DAT
,请使用
/[\u 0-9]+.DAT$/
作为正则表达式,而不是上面的正则表达式。

如果所有文件都以
.XYZ
结尾并遵循给定的模式,这也可能会起作用:

var filename = "SEM_VSE_SKINSHARPS_555001881_181002_1559_37072093.DAT"
filename.slice(0,-4).split("_").filter(x => !+x).join("_")
结果:

"SEM_VSE_SKINSHARPS"
这就是它的工作原理:

  • 删除最后4个字符(.DAT)
  • 拆分
  • 过滤掉数字
  • 将剩余的内容与另一个
    连接起来
  • 您还可以使用此解决方案(或其他解决方案)创建一个函数,并使用它处理阵列中的所有文件:

    var fileTrimmer = filename => filename.slice(0,-4).split("_").filter(x => !+x).join("_")
    var result = array_of_filenames.map(fileTrimmer)
    

    下面是一个解决方案,它假设您的文件名字符串存储在一个数组中。下面的代码只是利用原始数组上的
    array.prototype.map
    创建了一个新的格式正确的文件名数组,
    map
    回调函数首先抓取字符串的扩展名部分,以便稍后添加文件名。接下来,函数将
    文件名
    字符串拆分为一个数组,数组以
    字符分隔。最后,
    filter
    函数如果在
    fileName
    字符串中找不到数字,则返回
    true
    ,返回
    true
    表示元素将成为新数组的一部分。否则,
    filter
    将返回false,并且不包括字符串中包含数字的部分。
    var fileNames=['SEM_VSE_SKINSHARPS_555001881_181002_1559_37072093.DAT'、'SEM_VSE_SECURITY_555001881_181002_37072; u 37072093.DAT'、'SEM_VSE_medicalcondences_555001881_181002_1559_37072; 3707293.DAT'、'SEM_原因_555001881__181002_141; 37072093.DAT'、'SEM(PSE(NPIÑNPI)u SECURITY.DAT'];
    var formattedFileNames=fileNames.map(文件名=>{
    var ext=fileName.substring(fileName.indexOf('.')、fileName.length);
    var parts=fileName.split(“”);
    返回parts.filter(part=>!part.match(/[0-9]/g)).join(“”“)+ext;
    });
    
    log(格式化文件名)也许你应该编辑你的文章,并在你的示例列表中包含这些文件的预期输出。所有3个建议都有效。这个可能最适合我的需要。我羡慕你们这些读正则表达式的人。谢谢你的帮助。