J'ai des chaînes formatées comme suit: path/to/a/filename.txt
Maintenant, j'aimerais faire quelques manipulations de chaîne qui me permettent de supprimer très efficacement la partie "filename.txt" de ce code. En d'autres termes, je veux que ma chaîne devienne ceci: path/to/a/
Quel est le moyen le plus efficace de le faire? Actuellement, je coupe la chaîne et je reconnecte les éléments séparés, à l’exception du dernier, mais j’ai l’impression que c’est une façon vraiment TRÈS inefficace de le faire. Voici mon code actuel et inefficace:
res.getPath = function(file)
{
var elem = file.split("/");
var str = "";
for (var i = 0; i < elem.length-1; i++)
str += elem[i] + "/";
return str;
}
Utilisez lastIndexOf () pour trouver la position de la dernière barre oblique et obtenez la partie avant la barre oblique avec substring ().
str.substring(0, str.lastIndexOf("/"));
Que dis-tu de ça:
"path/to/a/filename.txt".split("/").slice(0, -1).join("/")+"/"
function splitPath(path) {
var dirPart, filePart;
path.replace(/^(.*\/)?([^/]*)$/, function(_, dir, file) {
dirPart = dir; filePart = file;
});
return { dirPart: dirPart, filePart: filePart };
}
là c'est mieux
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;
}
Usage:
var dir = getDirname(url.parse(request.url).pathname, '/');
.
var dir = getDirname(path.join('foo', 'bar', 'text.txt'), path.sep);
S'il s'agit de traiter un nom de fichier à partir d'un formulaire de téléchargement de fichier, la spécification HTML5 recommande le code suivant:
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
}
Référence: http://www.w3.org/TR/html5/number-state.html#file-upload-statehttp://www.w3.org/TR/html5/forms.html#file-upload-state-(type=file)
test/dir/lib/file- _09.ege.jpg
- Sera pour - test/dir/lib/
file- _09.ege.jpg
- Sera pour - 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;
}
}