JavaScript split()方法表现异常:文件扩展名未纳入拆分数组
关于split()处理文件名时的问题解析
咱们先把问题拆解清楚哈~
首先,你用的字符串是"this.is.a.test.mp3",如果直接调用split('.')方法,它会把每一个.都当成分隔符,所以生成的数组应该是:
["this", "is", "a", "test", "mp3"]
这时候pop()取出最后一个元素"mp3"完全符合预期,因为它本来就是数组里的独立项。
你提到“拆分后得到this,is,a,test mp3”,这大概率是你在把数组转成字符串输出时的格式失误——比如手动拼接的时候不小心给最后两个元素加了空格,而不是逗号。如果用arr.join(', ')来拼接数组,就能得到你期望的"this, is, a, test, mp3"啦。
如果你的真实需求是把完整文件名(包含前面的.)和扩展名分开(也就是得到["this.is.a.test", "mp3"]),那直接用split('.')就不合适了,因为它会拆分所有.。这时候可以用正则表达式来匹配最后一个.,只在这个位置拆分:
const fileName = "this.is.a.test.mp3"; const [name, ext] = fileName.split(/\.(?=[^.]+$)/); console.log(name); // "this.is.a.test" console.log(ext); // "mp3"
这个正则的意思是:匹配一个.,但要求这个.后面跟着的是“没有其他.的字符串直到结尾”,也就是只匹配最后一个分隔扩展名的.。
这样不管文件名里有多少个.,都能精准把扩展名单独拆出来,同时保留前面的完整文件名。
内容的提问来源于stack exchange,提问作者user3080392
相关产品推荐
相关产品推荐

