切断文件名的扩展名

时间:2014-02-18 14:13:12

标签: javascript regex filenames

我有一个像

这样的文件名列表
index.min.html
index.dev.html
index.min.js
index.dev.js
There.are.also.files.with.multiple.dots.and.other.extension

我想切断文件名的扩展名,但问题是我只能使用match来执行此任务。

我尝试了许多看起来像"index.min.html".match( /^((?!:(\.[^\.]+$)).+)/gi );的正则表达式来选择没有最后一个点和扩展名的文件名,但他们选择了孔文件名,没有或第一个点之前的部分。有没有办法只选择没有扩展名的文件名?

5 个答案:

答案 0 :(得分:10)

为何选择正则表达式?简单的子串表达式使这更简单:

var filename = 'index.something.js.html';

alert(filename.substr(0, filename.lastIndexOf(".")));

答案 1 :(得分:3)

我去了

/(.+)\..+$/mi

demo @ regex101

查看演示,特别是匹配。它只提供没有最后.的文件名和之后的字符。

答案 2 :(得分:3)

这个怎么样:(.*)\.[^\.]+http://regex101.com/r/xI6qM0

答案 3 :(得分:1)

更简单的解决方案是切掉最后一个元素:

var a = "index.min.html";
var b = a.split('.').slice(0, -1).join('.');

或者,更好的是,使用JavaScript的字符串函数substr

var b = a.substr(0, a.lastIndexOf("."));

为什么 要使用match

答案 4 :(得分:0)

也可以做到这一点:

function baseName(str) {
    if (typeof str !== 'string') return;
    var frags = str.split('.')
    return frags.splice(0,frags.length-1).join('.');    
}

REPL:http://repl.it/OvI

jsPerf:http://jsperf.com/string-extension-splits

<强>结果:

substr是此主题中所有选项中最快的。感谢其他人。