Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Construct a relative path in JavaScript from two absolute paths

Given two absolute paths, e.g.

/var/data/stuff/xyz.html
/var/data

How to create a relative path that uses the second path as its base? In the example above, the result would be: stuff/xyz.html

Another example:

/relative/sub/foo/sub/file
/relative/path
../../../path 

This is similar to this question but I'm looking for the optimal JavaScript solution instead of Java.

like image 896
Adam Jimenez Avatar asked Feb 19 '23 06:02

Adam Jimenez


2 Answers

If you're running this on the server with node.js:

http://nodejs.org/api/path.html#path_path_relative_from_to

This is their implementation:

https://github.com/joyent/node/blob/master/lib/path.js#L233

This should work in the browser without really any changes. It's been battle-tested, so it already handles edge cases. It's not a one-liner, but it works flawlessly, which I think is more important. The POSIX version isn't bad, if that's the only think you need to support.

like image 134
beatgammit Avatar answered Feb 20 '23 19:02

beatgammit


It's really easy to make mistakes with URL handling, so I highly recommend using a library to take care of all the nitty gritty details.

URI.js makes this simple:

URI('/var/data/stuff/xyz.html').relativeTo('/var/data');
like image 32
zzzzBov Avatar answered Feb 20 '23 21:02

zzzzBov