views:

38

answers:

3

I have strings formatted as follows:
path/to/a/filename.txt

Now I'd like to do some string manipulation which allows me to very efficiently remove the "filename.txt" part from this code. In other words, I want my string to become this:
path/to/a/

What's the most efficient way to do this? Currently I'm splitting the string and reconnecting the seperate elements except for the last one, but I get the feeling this is a really, REALLY inefficient way to do it. Here's my current, inefficient code:

res.getPath = function(file)
{
  var elem = file.split("/");
  var str = "";
  for (var i = 0; i < elem.length-1; i++)
    str += elem[i] + "/";
  return str;
}
A: 

How about this:

"path/to/a/filename.txt".split("/").slice(0, -1).join("/")+"/"
Gumbo
A: 
function splitPath(path) {
  var dirPart, filePart;
  path.replace(/^(.*\/)?([^/]*)$/, function(_, dir, file) {
    dirPart = dir; filePart = file;
  });
  return { dirPart: dirPart, filePart: filePart };
}

there that's better

Pointy
I'm using JS outside a browser, and it's giving me a "SyntaxError: unterminated character class ["
DaVince
+4  A: 

Use lastIndexOf() to find the position of the last slash and get the part before the slash with substring().

str.substring(0, str.lastIndexOf("/"));
Kees de Kooter
Short, and it works. Thanks! Can't believe I didn't think of using lastIndexOf()!
DaVince