var file1 = "50.xsl";
var file2 = "30.doc";
getFileExtension(file1); //returs xsl
getFileExtension(file2); //returs doc
function getFileExtension(filename) {
/*TODO*/
}
function getFileExtension1(filename) {
return (/[.]/.exec(filename)) ? /[^.]+$/.exec(filename)[0] : undefined;
}
split
方法function getFileExtension2(filename) {
return filename.split('.').pop();
}
这两种解决方法不能解决一些边缘情况,这有另一个更加强大的解决方法。
slice
、lastIndexOf
方法function getFileExtension3(filename) {
return filename.slice((filename.lastIndexOf(".") - 1 >>> 0) + 2);
}
console.log(getFileExtension3('')); // ''
console.log(getFileExtension3('filename')); // ''
console.log(getFileExtension3('filename.txt')); // 'txt'
console.log(getFileExtension3('.hiddenfile')); // ''
console.log(getFileExtension3('filename.with.many.dots.ext')); // 'ext'
这是如何实现的呢?
String.lastIndexOf() 方法返回指定值(本例中的'.'
)在调用该方法的字符串中最后出现的位置,如果没找到则返回 -1。
对于'filename'
和'.hiddenfile'
,lastIndexOf
的返回值分别为0
和-1
无符号右移操作符(»>) 将-1
转换为4294967295
,将-2
转换为4294967294
,这个方法可以保证边缘情况时文件名不变。
String.prototype.slice() 从上面计算的索引处提取文件的扩展名。如果索引比文件名的长度大,结果为""
。
解决方法 | 参数 | 结果 |
---|---|---|
解决方法 1: Regular Expression | ’‘ | undefined |
解决方法 2: String | ’‘ | ’’ |
解决方法 3: String | ’‘ | ’’ |
31 天前