Pet*_*Mmm 46 javascript string
我需要一个简短的基本名称功能(单线程?)用于Javascript:
basename("/a/folder/file.a.ext") -> "file.a"
basename("/a/folder/file.ext") -> "file"
basename("/a/folder/file") -> "file"
Run Code Online (Sandbox Code Playgroud)
这应该剥离路径和任何扩展.
更新:对于开头的点将很好地视为"特殊"文件
basename("/a/folder/.file.a.ext") -> ".file.a"
basename("/a/folder/.file.ext") -> ".file"
basename("/a/folder/.file") -> ".file" # empty is Ok
basename("/a/folder/.fil") -> ".fil" # empty is Ok
basename("/a/folder/.file..a..") -> # does'nt matter
Run Code Online (Sandbox Code Playgroud)
Niv*_*vas 68
function baseName(str)
{
var base = new String(str).substring(str.lastIndexOf('/') + 1);
if(base.lastIndexOf(".") != -1)
base = base.substring(0, base.lastIndexOf("."));
return base;
}
Run Code Online (Sandbox Code Playgroud)
如果您可以同时使用/
和\
作为分隔符,则必须更改代码以再添加一行
小智 64
function basename(path) {
return path.split('/').reverse()[0];
}
Run Code Online (Sandbox Code Playgroud)
将路径分解为组件目录和文件名然后返回最后一个(文件名),它是数组的最后一个元素.
Eug*_*scu 23
任何上述工作虽然他们不尊重速度/记忆:-).
更快/更简单的实现应该使用尽可能少的功能/操作.RegExp是一个糟糕的选择,因为它实际上可以实现相同的结果但更容易消耗大量资源.
当你想要包含扩展名的文件名(实际上这是basename 的真正定义)时的实现:
function basename(str, sep) {
return str.substr(str.lastIndexOf(sep) + 1);
}
Run Code Online (Sandbox Code Playgroud)
如果你需要一个自定义的basename实现,它也必须去除扩展,我会推荐一个特定的扩展剥离函数,你可以随时调用它.
function strip_extension(str) {
return str.substr(0,str.lastIndexOf('.'));
}
Run Code Online (Sandbox Code Playgroud)
用法示例:
basename('file.txt','/'); // real basename
strip_extension(basename('file.txt','/')); // custom basename
Run Code Online (Sandbox Code Playgroud)
它们是分开的,您可以将它们组合起来以获得3种不同的东西:剥离扩展,获取实名,获取自定义基本名称.我认为它比其他方法更优雅.
Ran*_*ndy 11
如果可以,也许尝试使用现有的包. http://nodejs.org/api/path.html
var path = require('path');
var str = '/path/to/file/test.html'
var fileNameStringWithoutExtention = path.basename(str, '.html');
// returns 'test'
// let path determine the extension
var fileNameStringWithoutExtention = path.basename(str, path.extname(str));
// returns 'test'
Run Code Online (Sandbox Code Playgroud)
其他例子:
var pathString = path.dirname(str);
var fileNameStringWithExtention = path.basename(str);
var fullPathAndFileNameString = path.join(pathString, fileNameString);
Run Code Online (Sandbox Code Playgroud)
basename = function(path) {
return path.replace(/.*\/|\.[^.]*$/g, '');
}
Run Code Online (Sandbox Code Playgroud)
替换以斜线.*\/
或点结尾的任何东西- 一些非圆点 - \.[^.]*$
没有任何结尾