我有一个像
这样的文件名列表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 );
的正则表达式来选择没有最后一个点和扩展名的文件名,但他们选择了孔文件名,没有或第一个点之前的部分。有没有办法只选择没有扩展名的文件名?
答案 0 :(得分:10)
为何选择正则表达式?简单的子串表达式使这更简单:
var filename = 'index.something.js.html';
alert(filename.substr(0, filename.lastIndexOf(".")));
答案 1 :(得分:3)
答案 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
是此主题中所有选项中最快的。感谢其他人。