¿Existe una función javascript (del lado del cliente) incorporada que funcione de manera similar a la ruta. unir de path.join ? Sé que puedo unir cadenas de la siguiente manera:
['a', 'b'].join('/')El problema es que si las cadenas ya contienen un "/" al principio o al final, entonces no se unirán correctamente, por ejemplo:
['a/','b'].join('/')Utilice el módulo de path . path.join es exactamente lo que estás buscando. De los documentos :
path.join([path1][, path2][, ...])#Une todos los argumentos y normaliza la ruta resultante.Los argumentos deben ser cadenas. En v0.8, los argumentos que no eran cadenas se ignoraban silenciosamente. En v0.10 y posteriores, se lanza una excepción.
Ejemplo:
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
Editar:
Asumí aquí que estás usando Javascript del lado del servidor como node.js. Si desea usarlo en el navegador, puede usar path-browserify .
Sobre la base de la respuesta de @Berty, esta variante de ES6 conserva todas las barras diagonales iniciales, para trabajar con direcciones URL relativas al protocolo (como //stackoverflow.com ), y también ignora las partes vacías:
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('/') }build_path("http://google.com/", "my", "path") devolverá "http://google.com/my/path"build_path("//a", "", "/", "/b/") devolverá "//a/b"build_path() devolverá ""Tenga en cuenta que esta expresión regular elimina las barras inclinadas. A veces, una barra inclinada final tiene un significado semántico (por ejemplo, denota un directorio en lugar de un archivo), y esa distinción se perderá aquí.
Actualmente no hay una función integrada que realice una unión y prevenga los separadores duplicados. Si quieres conciso, solo escribiría el tuyo propio:
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//'])