Misalnya, dengan asumsi itu x = filename.jpg
, saya ingin dapatkan filename
, di mana filename
bisa ada nama file apa saja (Mari kita asumsikan nama file hanya berisi [a-zA-Z0-9-_] untuk disederhanakan.).
Saya melihat x.substring(0, x.indexOf('.jpg'))
di DZone Snippets , tetapi tidak akan x.substring(0, x.length-4)
berkinerja lebih baik? Karena, length
adalah properti dan tidak melakukan pengecekan karakter sedangkan indexOf()
fungsi dan pengecekan karakter.
Jawaban:
Jika Anda tahu panjang ekstensi, Anda dapat menggunakan
x.slice(0, -4)
(di mana 4 adalah tiga karakter dari ekstensi dan titik).Jika Anda tidak tahu panjang regex @ John Hartsock akan menjadi pendekatan yang tepat.
Jika Anda lebih suka tidak menggunakan ekspresi reguler, Anda dapat mencoba ini (lebih sedikit performan):
Perhatikan bahwa itu akan gagal pada file tanpa ekstensi.
sumber
.jpg
. Saya mencari sesuatu seperti Rubyx[0..-5]
, danx.slice(0, -4)
terlihat hebat! Terima kasih! Dan terima kasih kepada semua orang untuk semua alternatif kuat lainnya yang disediakan!"picture.jpeg".slice(0, -4)
-> "gambar."Tidak yakin apa yang akan bekerja lebih cepat tetapi ini akan lebih dapat diandalkan ketika datang ke ekstensi seperti
.jpeg
atau.html
sumber
Di node.js , nama file tanpa ekstensi dapat diperoleh sebagai berikut.
Penjelasan lebih lanjut di halaman dokumentasi Node.js.
sumber
var parsed = path.parse(filename)
diikuti olehpath.join(parsed.dir, parsed.name)
.let base = path.basename( file_path, path.extname( file_path ) )
.x.length-4
hanya menyumbang ekstensi 3 karakter. Bagaimana jika Anda punyafilename.jpeg
ataufilename.pl
?EDIT:
Untuk menjawab ... tentu saja, jika Anda selalu memiliki ekstensi
.jpg
,x.length-4
akan bekerja dengan baik.Namun, jika Anda tidak tahu panjang ekstensi Anda, salah satu dari sejumlah solusi lebih baik / lebih kuat.
x = x.replace(/\..+$/, '');
ATAU
x = x.substring(0, x.lastIndexOf('.'));
ATAU
x = x.replace(/(.*)\.(.*?)$/, "$1");
ATAU (dengan asumsi nama file hanya memiliki satu titik)
ATAU (juga dengan hanya satu titik)
sumber
var parts = full_file.split("."); var ext = parts[parts.length-1]; var file = parts.splice(0,parts.length-1).join(".");
x = x.substr(0, x.lastIndexOf('.'));
- Anda mungkin bermaksudx = x.substring(0, x.lastIndexOf('.'));
?Anda mungkin dapat menggunakan asumsi bahwa titik terakhir akan menjadi pembatas ekstensi.
Jika file tidak memiliki ekstensi, itu akan mengembalikan string kosong. Untuk memperbaikinya gunakan fungsi ini
sumber
var f = x.substr(0, x.lastIndexOf('.')) || x;
Ini berfungsi karena string kosong adalah falsy, oleh karena itu mengembalikan x.Saya suka yang ini karena ini adalah liner satu yang tidak terlalu sulit dibaca:
sumber
Dalam versi Node.js sebelum 0.12.x:
path.basename(filename, path.extname(filename))
Tentu saja ini juga berfungsi di 0.12.x dan yang lebih baru.
sumber
path.parse
Jawabannya sederhana.Ini berfungsi, bahkan ketika pembatas tidak ada dalam string.
Dapat juga digunakan sebagai one-liner seperti ini:
EDIT: Ini adalah solusi yang lebih efisien:
sumber
Saya tidak tahu apakah ini opsi yang valid tetapi saya menggunakan ini:
Bukan hanya satu operasi yang saya tahu, tetapi setidaknya itu harus selalu berhasil!
UPDATE: Jika Anda ingin oneliner, di sini Anda berada:
(name.split('.').slice(0, -1)).join('.')
sumber
hello.name.txt
kembalihello, name
Satu kalimat lagi:
sumber
Berikut solusi berbasis regex lain:
Ini seharusnya hanya memotong segmen terakhir.
sumber
Sederhana
sumber
Jawaban yang diterima hanya menghapus bagian ekstensi terakhir (
.jpeg
), yang mungkin merupakan pilihan yang baik dalam kebanyakan kasus.Saya pernah harus menghapus semua ekstensi (
.tar.gz
) dan nama file dibatasi untuk tidak mengandung titik (jadi2015-01-01.backup.tar
tidak akan menjadi masalah):sumber
sumber
path/name.ext
->paht/name
bukan hanya kembaliname
, tapi saya lebih suka melakukannya denganfs.parse
meskipun sedikit lebih verbose: stackoverflow.com/a/59576950/895245Jika Anda harus memproses variabel yang berisi path lengkap (mis .:)
thePath = "http://stackoverflow.com/directory/subdirectory/filename.jpg"
dan Anda ingin mengembalikan hanya "nama file" Anda dapat menggunakan:hasilnya adalah theName == "filename" ;
Untuk mencobanya tulis perintah berikut ke jendela konsol debugger krom Anda:
window.location.pathname.split("/").slice(-1).join().split(".").shift()
Jika Anda harus memproses hanya nama file dan ekstensinya (mis .:)
theNameWithExt = "filename.jpg"
:hasilnya adalah theName == "filename" , sama seperti di atas;
Catatan:
Tapi saya tidak bisa mengatakan apa-apa tentang perbandingan kinerja dengan jawaban lain atau untuk kompatibilitas browser atau OS.
cuplikan 1 yang berfungsi: jalur lengkap
cuplikan kerja 2: nama file dengan ekstensi
cuplikan kerja 2: nama file dengan ekstensi ganda
sumber
Meskipun sudah agak terlambat, saya akan menambahkan pendekatan lain untuk mendapatkan nama file tanpa ekstensi menggunakan JS- tua biasa
path.replace(path.substr(path.lastIndexOf('.')), '')
sumber
path.split('.').pop()
untuk satu ekstensi file bagianNode.js menghapus ekstensi dari direktori pemelihara jalur penuh
https://stackoverflow.com/a/31615711/895245 misalnya lakukan
path/hello.html
->hello
, tetapi jika Anda maupath/hello.html
->path/hello
, Anda dapat menggunakan ini:direktori keluaran juga:
https://stackoverflow.com/a/36099196/895245 juga mencapai ini, tapi saya menemukan pendekatan ini sedikit lebih menyenangkan secara semantik.
Diuji dalam Node.js v10.15.2.
sumber
Di sinilah ekspresi reguler berguna!
.replace()
Metode Javascript akan mengambil ekspresi reguler, dan Anda dapat menggunakannya untuk mencapai apa yang Anda inginkan:sumber
Satu liner lain - kami anggap file kami adalah gambar jpg >> ex: var yourStr = 'test.jpg';
sumber
Anda bisa menggunakannya
path
untuk bermanuver.Keluaran
sumber
sumber
Ini adalah kode yang saya gunakan untuk menghapus ekstensi dari nama file, tanpa menggunakan regex atau indexOf (indexOf tidak didukung di IE8). Diasumsikan bahwa ekstensi adalah teks apa pun setelah 'terakhir'. karakter.
Ini berfungsi untuk:
Ini kodenya:
sumber
hello.tar.gz
, outputhellotar
.Saya akan menggunakan sesuatu seperti x.substring (0, x.lastIndexOf ('.')). Jika Anda ingin kinerja, jangan gunakan javascript sama sekali :-p Tidak, satu pernyataan lagi benar-benar tidak masalah untuk 99,99999% dari semua tujuan.
sumber