Yanıtlar:
var filename = fullPath.replace(/^.*[\\\/]/, '')
Bu, hem \ OR / hem de yolları işleyecektir
replace
bir çok daha yavaş substr
bağlantılı olarak kullanılabilecek, lastIndexOf('/')+1
: jsperf.com/replace-vs-substring
"/var/drop/foo/boo/moo.js".replace(/^.*[\\\/]/, '')
dönermoo.js
Sadece performans uğruna, burada verilen tüm cevapları test ettim:
var substringTest = function (str) {
return str.substring(str.lastIndexOf('/')+1);
}
var replaceTest = function (str) {
return str.replace(/^.*(\\|\/|\:)/, '');
}
var execTest = function (str) {
return /([^\\]+)$/.exec(str)[1];
}
var splitTest = function (str) {
return str.split('\\').pop().split('/').pop();
}
substringTest took 0.09508600000000023ms
replaceTest took 0.049203000000000004ms
execTest took 0.04859899999999939ms
splitTest took 0.02505500000000005ms
Ve kazanan Split ve Pop tarzı cevap, Bobince sayesinde !
path.split(/.*[\/|\\]/)[1];
Node.js'de, Path'ın ayrıştırma modülünü kullanabilirsiniz ...
var path = require('path');
var file = '/home/user/dir/file.txt';
var filename = path.parse(file).base;
//=> 'file.txt'
basename
işlevi kullanabilirsiniz :path.basename(file)
Yol hangi platformdan geliyor? Windows yolları POSIX yollarından farklı Mac OS 9'dan farklı yollar RISC OS yollarından farklı ...
Dosya adının farklı platformlardan gelebileceği bir web uygulamasıysa, tek bir çözüm yoktur. Ancak mantıklı bir sapma, yol ayırıcı olarak hem '\' (Windows) hem de '/' (Linux / Unix / Mac ve ayrıca Windows'ta bir alternatif) kullanmaktır. Ekstra eğlence için RegExp olmayan bir sürüm:
var leafname= pathname.split('\\').pop().split('/').pop();
var path = '\\Dir2\\Sub1\\SubSub1'; //path = '/Dir2/Sub1/SubSub1'; path = path.split('\\').length > 1 ? path.split('\\').slice(0, -1).join('\\') : path; path = path.split('/').length > 1 ? path.split('/').slice(0, -1).join('/') : path; console.log(path);
Ates, çözümünüz girdi olarak boş bir dizeye karşı koruma sağlamaz. Bu durumda, başarısız olur TypeError: /([^(\\|\/|\:)]+)$/.exec(fullPath) has no properties
.
bobince, işte DOS, POSIX ve HFS yol sınırlayıcılarını (ve boş dizeleri) işleyen nickf'lerin bir sürümü:
return fullPath.replace(/^.*(\\|\/|\:)/, '');
Değil fazla nickf en fazla özlü cevap , ama bu doğrudan "özü" yerine boş bir dize ile istenmeyen parçaları değiştirmenin cevap:
var filename = /([^\\]+)$/.exec(fullPath)[1];
"Uzantı olmadan dosya adı al" sorusunu soran bir soru var, ancak bunun için çözüm yok. İşte Bobbie'nin çözümünden değiştirilen çözüm.
var name_without_ext = (file_name.split('\\').pop().split('/').pop().split('.'))[0];
Bir diğeri
var filename = fullPath.split(/[\\\/]/).pop();
Burada bölünmüş bir karakter sınıfına sahip düzenli bir ifadeye sahiptir
. İki karakterin '\'
Veya bölmek için dizi kullanın
var filename = fullPath.split(['/','\\']).pop();
Gerekirse, daha fazla ayırıcıyı bir diziye dinamik olarak aktarmanın yolu olurdu.
Eğer fullPath
açıkça kodunuzda bir dize tarafından ayarlanır o gereken ters eğik çizgi kaçış !
Sevmek"C:\\Documents and Settings\\img\\recycled log.jpg"
<script type="text/javascript">
function test()
{
var path = "C:/es/h221.txt";
var pos =path.lastIndexOf( path.charAt( path.indexOf(":")+1) );
alert("pos=" + pos );
var filename = path.substring( pos+1);
alert( filename );
}
</script>
<form name="InputForm"
action="page2.asp"
method="post">
<P><input type="button" name="b1" value="test file button"
onClick="test()">
</form>
Tam cevap:
<html>
<head>
<title>Testing File Upload Inputs</title>
<script type="text/javascript">
function replaceAll(txt, replace, with_this) {
return txt.replace(new RegExp(replace, 'g'),with_this);
}
function showSrc() {
document.getElementById("myframe").href = document.getElementById("myfile").value;
var theexa = document.getElementById("myframe").href.replace("file:///","");
var path = document.getElementById("myframe").href.replace("file:///","");
var correctPath = replaceAll(path,"%20"," ");
alert(correctPath);
}
</script>
</head>
<body>
<form method="get" action="#" >
<input type="file"
id="myfile"
onChange="javascript:showSrc();"
size="30">
<br>
<a href="#" id="myframe"></a>
</form>
</body>
</html>
GNU / Linux & UNIX mutlak yollarının yanı sıra Windows için tam bir yoldan dosya adını belirlemek için projenize dahil edilecek küçük bir işlev.
/**
* @param {String} path Absolute path
* @return {String} File name
* @todo argument type checking during runtime
* @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/includes
* @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice
* @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/lastIndexOf
* @example basename('/home/johndoe/github/my-package/webpack.config.js') // "webpack.config.js"
* @example basename('C:\\Users\\johndoe\\github\\my-package\\webpack.config.js') // "webpack.config.js"
*/
function basename(path) {
let separator = '/'
const windowsSeparator = '\\'
if (path.includes(windowsSeparator)) {
separator = windowsSeparator
}
return path.slice(path.lastIndexOf(separator) + 1)
}
<html>
<head>
<title>Testing File Upload Inputs</title>
<script type="text/javascript">
<!--
function showSrc() {
document.getElementById("myframe").href = document.getElementById("myfile").value;
var theexa = document.getElementById("myframe").href.replace("file:///","");
alert(document.getElementById("myframe").href.replace("file:///",""));
}
// -->
</script>
</head>
<body>
<form method="get" action="#" >
<input type="file"
id="myfile"
onChange="javascript:showSrc();"
size="30">
<br>
<a href="#" id="myframe"></a>
</form>
</body>
</html>
Sorunuz için Başarıyla Komut Dosyası, Tam Test
<script src="~/Scripts/jquery-1.10.2.min.js"></script>
<p title="text" id="FileNameShow" ></p>
<input type="file"
id="myfile"
onchange="javascript:showSrc();"
size="30">
<script type="text/javascript">
function replaceAll(txt, replace, with_this) {
return txt.replace(new RegExp(replace, 'g'), with_this);
}
function showSrc() {
document.getElementById("myframe").href = document.getElementById("myfile").value;
var theexa = document.getElementById("myframe").href.replace("file:///", "");
var path = document.getElementById("myframe").href.replace("file:///", "");
var correctPath = replaceAll(path, "%20", " ");
alert(correctPath);
var filename = correctPath.replace(/^.*[\\\/]/, '')
$("#FileNameShow").text(filename)
}
Bu çözüm hem 'dosya adı' hem de 'yol' için çok daha basit ve geneldir.
const str = 'C:\\Documents and Settings\\img\\recycled log.jpg';
// regex to split path to two groups '(.*[\\\/])' for path and '(.*)' for file name
const regexPath = /^(.*[\\\/])(.*)$/;
// execute the match on the string str
const match = regexPath.exec(str);
if (match !== null) {
// we ignore the match[0] because it's the match for the hole path string
const filePath = match[1];
const fileName = match[2];
}
function getFileName(path, isExtension){
var fullFileName, fileNameWithoutExtension;
// replace \ to /
while( path.indexOf("\\") !== -1 ){
path = path.replace("\\", "/");
}
fullFileName = path.split("/").pop();
return (isExtension) ? fullFileName : fullFileName.slice( 0, fullFileName.lastIndexOf(".") );
}