Domanda JS: il modo più ottimizzato per rimuovere un nome file da un percorso in una stringa?


Ho le stringhe formattate come segue:
path/to/a/filename.txt

Ora mi piacerebbe fare un po 'di manipolazione delle stringhe che mi permetta di rimuovere in modo molto efficiente la parte "filename.txt" da questo codice. In altre parole, voglio che la mia stringa diventi questa:
path/to/a/

Qual è il modo più efficiente per farlo? Attualmente sto dividendo la stringa e ricollegando gli elementi separati tranne che per l'ultimo, ma ho la sensazione che questo sia un modo davvero, DAVVERO inefficiente per farlo. Ecco il mio codice attuale e inefficiente:

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

44
2018-02-02 20:06


origine


risposte:


Utilizzare lastIndexOf () per trovare la posizione dell'ultima barra e ottenere la parte prima della barra con substring ().

str.substring(0, str.lastIndexOf("/"));

86
2018-02-02 20:09



Cosa ne pensi di questo:

"path/to/a/filename.txt".split("/").slice(0, -1).join("/")+"/"

10
2018-02-02 20:08



function splitPath(path) {
  var dirPart, filePart;
  path.replace(/^(.*\/)?([^/]*)$/, function(_, dir, file) {
    dirPart = dir; filePart = file;
  });
  return { dirPart: dirPart, filePart: filePart };
}

là è meglio


1
2018-02-02 20:09



Se si tratta di elaborare un nome file da un modulo di caricamento file, la specifica HTML5 raccomanda il seguente codice:

function extractFilename(path) {
  if (path.substr(0, 12) == "C:\\fakepath\\")
    return path.substr(12); // modern browser
  var x;
  x = path.lastIndexOf('/');
  if (x >= 0) // Unix-based path
    return path.substr(x+1);
  x = path.lastIndexOf('\\');
  if (x >= 0) // Windows-based path
    return path.substr(x+1);
  return path; // just the filename
}

Riferimento: http://www.w3.org/TR/html5/number-state.html#file-upload-state http://www.w3.org/TR/html5/forms.html#file-upload-state-(type=file)


1
2017-10-04 09:15



function getDirname(pathname, separator) {
    var parts = pathname.split(separator);
    if (parts[parts.length - 1].indexOf('.') > -1) {
        return parts.slice(0, -1).join(separator)
    }
    return pathname;
}

Uso:

var dir = getDirname(url.parse(request.url).pathname, '/');

.

var dir = getDirname(path.join('foo', 'bar', 'text.txt'), path.sep);

0
2017-07-25 11:39



test/dir/lib/file- _09.ege.jpg - Sarà a - test/dir/lib/

file- _09.ege.jpg - Sarà a - file- _09.ege.jpg

    console.log("test - "+getPath('test/dir/lib/file- _09.ege.jpg'));

    function getPath(path){
        path = path.match(/(^.*[\\\/]|^[^\\\/].*)/i);
        if(path != null){
            return path[0];
        }else{
            return false;
        }            
    }

console.log("test - "+getPath('test/dir/lib/file- _09.ege.jpg'));

        function getPath(path){
            path = path.match(/(^.*[\\\/]|^[^\\\/].*)/i);
            if(path != null){
                return path[0];
            }else{
                return false;
            }            
        }


0
2017-10-26 15:14