aen*_*nsm 20 javascript python
是否有一个内置的javascript函数,其功能类似于python的os.path.join?我知道我可以通过以下方式加入字符串:
['a', 'b'].join('/')
Run Code Online (Sandbox Code Playgroud)
问题是如果字符串已经包含前导/尾随"/",那么它们将无法正确连接,例如:
['a/','b'].join('/')
Run Code Online (Sandbox Code Playgroud)
编辑: 应该已经指定我正在做这个客户端.
Car*_*ten 12
使用该path模块.path.join正是你要找的.来自文档:
path.join([path1][, path2][, ...])#将所有参数连接在一起并规范化生成的路径.参数必须是字符串.在v0.8中,非字符串参数被静默忽略.在v0.10及更高版本中,抛出异常.
例:
Run Code Online (Sandbox Code Playgroud)path.join('/foo', 'bar', 'baz/asdf', 'quux', '..') // returns '/foo/bar/baz/asdf' path.join('foo', {}, 'bar') // throws exception TypeError: Arguments to path.join must be strings
编辑:
我假设你在使用像node.js这样的服务器端Javascript.如果要在浏览器中使用它,可以使用path-browserify.
Rob*_* M. 10
目前没有内置功能可以在防止重复分隔符的同时执行连接.如果你想要简洁,我只想写自己的:
function pathJoin(parts, sep){
var separator = sep || '/';
var replace = new RegExp(separator+'{1,}', 'g');
return parts.join(separator).replace(replace, separator);
}
var path = pathJoin(['a/', 'b', 'c//'])
Run Code Online (Sandbox Code Playgroud)
基于@Berty的回复,此ES6变体保留了所有前导斜杠,以与协议相关的url(如//stackoverflow.com)一起使用,并且还忽略了任何空白部分:
build_path = (...args) => {
return args.map((part, i) => {
if (i === 0) {
return part.trim().replace(/[\/]*$/g, '')
} else {
return part.trim().replace(/(^[\/]*|[\/]*$)/g, '')
}
}).filter(x=>x.length).join('/')
}
Run Code Online (Sandbox Code Playgroud)
build_path("http://google.com/", "my", "path") 将返回 "http://google.com/my/path"build_path("//a", "", "/", "/b/") 将返回 "//a/b"build_path() 将返回 ""接受的答案不适用于 URL,它在协议
https://hostname变为https:/hostname.
大多数其他答案不会以不同的方式处理第一部分和最后一部分。不应删除开头或结尾的斜杠,它会改变连接路径的含义(相对/绝对)(文件/目录)。
以下是已接受答案的修改版本:
function pathJoin(parts, sep){
const separator = sep || '/';
parts = parts.map((part, index)=>{
if (index) {
part = part.replace(new RegExp('^' + separator), '');
}
if (index !== parts.length - 1) {
part = part.replace(new RegExp(separator + '$'), '');
}
return part;
})
return parts.join(separator);
}
Run Code Online (Sandbox Code Playgroud)
用法:
console.log(pathJoin(['https://', 'hostname', 'path/'])); // 'https://hostname/path/'
console.log(pathJoin(['relative/', 'path', 'to/dir/'])); // 'relative/path/to/dir/'
console.log(pathJoin(['/absolute/', 'path', 'to/file'])); // '/absolute/path/to/file'
Run Code Online (Sandbox Code Playgroud)
https://jsfiddle.net/tdsLencu/
| 归档时间: |
|
| 查看次数: |
14037 次 |
| 最近记录: |