and I would like to remove the first and last slash if it’s exists.
^\/(.+)\/?$ but it doesn’t work.
return theString.replace(/^\/|\/$/g, '');
“Replace all (
/.../g) leading slash (
^\/) or (
|) trailing slash (
\/$) with an empty string.”
There’s no real reason to use a regex here, string functions will work fine:
var string = "/banking/bonifici/italia/"; if (string.charAt(0) == "/") string = string.substr(1); if (string.charAt(string.length - 1) == "/") string = string.substr(0, string.length - 1); // string => "banking/bonifici/italia"
See this in action on jsFiddle.
In case if using RegExp is not an option, or you have to handle corner cases while working with URLs (such as double/triple slashes or empty lines without complex replacements), or utilizing additional processing, here’s a less obvious, but more functional-style solution:
const urls = [ '//some/link///to/the/resource/', '/root', '/something/else', ]; const trimmedUrls = urls.map(url => url.split('/').filter(x => x).join('/')); console.log(trimmedUrls);
In this snippet
filter() function can implement more complex logic than just filtering empty strings (which is default behavior).
Word of warning – this is not as fast as other snippets here.
Just in case that someone needs a premature optimization here…
var path = '///foo/is/not/equal/to/bar///' var count = path.length - 1 var index = 0 while (path.charCodeAt(index) === 47 && ++index); while (path.charCodeAt(count) === 47 && --count); path = path.slice(index, count + 1)