Jawaban:
var filename = fullPath.replace(/^.*[\\\/]/, '')
Ini akan menangani jalur \ OR / in
replace
adalah jauh lebih lambat dari substr
yang dapat digunakan dalam hubungannya dengan lastIndexOf('/')+1
: jsperf.com/replace-vs-substring
"/var/drop/foo/boo/moo.js".replace(/^.*[\\\/]/, '')
pengembalianmoo.js
Hanya demi kinerja, saya menguji semua jawaban yang diberikan di sini:
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
Dan pemenangnya adalah jawaban gaya Split dan Pop , Terima kasih kepada bobince !
path.split(/.*[\/|\\]/)[1];
Di Node.js, Anda dapat menggunakan modul parse Path ...
var path = require('path');
var file = '/home/user/dir/file.txt';
var filename = path.parse(file).base;
//=> 'file.txt'
basename
fungsi:path.basename(file)
Dari platform apa jalur itu berasal? Jalur Windows berbeda dari jalur POSIX berbeda dari jalur Mac OS 9 jalur berbeda dari jalur RISC OS berbeda ...
Jika ini adalah aplikasi web tempat nama file dapat berasal dari platform yang berbeda, tidak ada satu solusi. Namun tusukan yang masuk akal adalah dengan menggunakan '\' (Windows) dan '/' (Linux / Unix / Mac dan juga alternatif pada Windows) sebagai pemisah jalur. Ini versi non-RegExp untuk kesenangan ekstra:
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);
Saat itu, solusi Anda tidak melindungi terhadap string kosong sebagai input. Dalam hal itu, gagal denganTypeError: /([^(\\|\/|\:)]+)$/.exec(fullPath) has no properties
.
bobince, inilah versi nickf's yang menangani pembatas path DOS, POSIX, dan HFS (dan string kosong):
return fullPath.replace(/^.*(\\|\/|\:)/, '');
Pertanyaan yang menanyakan "dapatkan nama file tanpa ekstensi" merujuk ke sini tetapi tidak ada solusi untuk itu. Berikut adalah solusi yang dimodifikasi dari solusi Bobbie.
var name_without_ext = (file_name.split('\\').pop().split('/').pop().split('.'))[0];
Yang lainnya
var filename = fullPath.split(/[\\\/]/).pop();
Di sini split memiliki ekspresi reguler dengan kelas karakter
. Kedua karakter harus diloloskan dengan '\'
Atau gunakan array untuk membagi
var filename = fullPath.split(['/','\\']).pop();
Ini akan menjadi cara untuk secara dinamis mendorong lebih banyak separator ke dalam array, jika diperlukan.
Jika fullPath
secara eksplisit diatur oleh string dalam kode Anda, ia harus lolos dari backslash !
Suka"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>
Jawaban lengkapnya adalah:
<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>
Sedikit fungsi untuk dimasukkan dalam proyek Anda untuk menentukan nama file dari jalur lengkap untuk Windows serta jalur absolut GNU / Linux & UNIX.
/**
* @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>
Script berhasil untuk pertanyaan Anda, Tes Lengkap
<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)
}
Solusi ini jauh lebih sederhana dan generik, untuk 'nama file' dan 'jalur'.
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(".") );
}