কীভাবে জাভাস্ক্রিপ্ট ব্যবহার করে পুরো পথ থেকে ফাইলের নাম পাবেন?


310

এমন কোনও উপায় আছে যে আমি একটি সম্পূর্ণ পথ থেকে সর্বশেষ মান ('symbol' চিহ্নের উপর ভিত্তি করে) পাব?

উদাহরণ:

C:\Documents and Settings\img\recycled log.jpg

এই ক্ষেত্রে, আমি কেবল recycled log.jpgজাভাস্ক্রিপ্টের পুরো পথ থেকে পেতে চাই ।

উত্তর:


696
var filename = fullPath.replace(/^.*[\\\/]/, '')

এটি \ OR / উভয় পথে পরিচালনা করবে


4
ম্যাক
ওএসএক্সে

7
এই সাইটের তথ্য অনুযায়ী, ব্যবহার replaceহয় অনেক তুলনায় ধীর substr, যা সাথে ব্যবহার করা যেতে পারেlastIndexOf('/')+1 : jsperf.com/replace-vs-substring
Nate

1
@ নিকফ নিক, আমি কোথায় ভুল করছি তা নিশ্চিত নন তবে ফাইল পাথটি একক স্ল্যাশ করার সময় কোডটি আমার পক্ষে কাজ করে না। Fiddleযদিও `\\` এর জন্য , এটি দুর্দান্ত কাজ করে।
শুভ

1
আমি এটি কেবল আমার কনসোলে "/var/drop/foo/boo/moo.js".replace(/^.*[\\\/]/, '')moo.js
চালিয়েছি

1
@ ZloySmiertniy কয়েকজন ভাল অনলাইন রেইগেক্স ব্যাখ্যক রয়েছে। rick.measham.id.au/paste/explain.pl?regex=%2F%5E । *% 5B% 5C% 5C% 5C% 2F% 5D% 2F এবং regexper.com/#%2F%5E । *% 5B % 5C% 5C% 5C% 2F% 5D% 2F সহায়তা করা উচিত। (লিঙ্কগুলি এখানে ভাঙা হয়েছে, তবে একটি ট্যাবে অনুলিপি করুন এবং এটি কার্যকর হবে)
নিকফ

115

শুধু পারফরম্যান্সের খাতিরে, আমি এখানে দেওয়া সমস্ত উত্তর পরীক্ষা করেছি:

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

এবং বিজয়ী হল স্প্লিট এবং পপ শৈলীর উত্তর, ববিনসকে ধন্যবাদ !


4
মেটা আলোচনা অনুযায়ী, দয়া করে অন্যান্য উত্তরের যথাযথ উদ্ধৃতি যুক্ত করুন। আপনি রানটাইম কীভাবে বিশ্লেষণ করেছেন তা আরও ভালভাবে ব্যাখ্যা করতে এটি সহায়ক হবে।
jpmc26

এই সংস্করণটি বেনমার্ক নির্দ্বিধায় নির্দ্বিধায়। ম্যাক এবং উইন্ডোজ উভয় ফাইল পাথ সমর্থন করা উচিত। path.split(/.*[\/|\\]/)[1];
tfmontague

2
পরীক্ষাটি ভুল। সাবস্ট্রিংস্টেস্ট কেবলমাত্র ফরোয়ার্ড স্ল্যাশ, এক্সিকিউটস্টের জন্য অনুসন্ধান করে - কেবল ব্যাকস্ল্যাশের জন্য যখন দু'জন অবশিষ্ট উভয় স্ল্যাশ পরিচালনা করে। এবং প্রকৃত ফলাফল প্রাসঙ্গিক নয় (আর)। এটি দেখুন: jsperf.com/name-from-path
দুঃখ

@ দুঃখিত যে লিঙ্কটি আর বৈধ নয়।
পাকোগোমেজ

88

নোড.জেজে, আপনি পাথের পার্স মডিউলটি ব্যবহার করতে পারেন ...

var path = require('path');
var file = '/home/user/dir/file.txt';

var filename = path.parse(file).base;
//=> 'file.txt'

14
নোড.জেএস ব্যবহার করে আপনি কেবল basenameফাংশনটি ব্যবহার করতে পারেন :path.basename(file)
ইলেক্ট্রোভির

66

কোন প্ল্যাটফর্ম থেকে পথ আসে? উইন্ডোজ পাথগুলি পসিক্স থেকে পৃথক পাথগুলি ম্যাক ওএস থেকে পৃথক 9 পাথ আরআইএসসি ওএসের থেকে পৃথক পৃথক পৃথক পাথ ...

যদি এটি এমন কোনও ওয়েব অ্যাপ্লিকেশন যেখানে ফাইলের নামটি বিভিন্ন প্ল্যাটফর্ম থেকে আসতে পারে তবে এর কোনও সমাধান নেই। তবে যুক্তিসঙ্গত ছুরিকাটি হ'ল '\' (উইন্ডোজ) এবং '/' (লিনাক্স / ইউনিক্স / ম্যাক এবং উইন্ডোজের বিকল্প) উভয়কে পৃথক পৃথক হিসাবে ব্যবহার করা। অতিরিক্ত মজাদার জন্য এখানে একটি নন-রেজিপ্যাক্স সংস্করণ:

var leafname= pathname.split('\\').pop().split('/').pop();

আপনি সেই ক্লাসিক ম্যাকওএস (<= 9) ব্যবহৃত কোলন বিভাজক (:) যোগ করতে চাইতে পারেন তবে আমি এখনও এমন কোনও ব্রাউজারগুলিতে অবগত নই যা ম্যাকোস পাথগুলিকে ফাইলের আকারে পসিক্স পাথগুলিতে অনুবাদ করেনি use : ///path/to/file.ext
চোখের পলকহীনতা

4
আপনি কেবল বিপরীত () [0] এর পরিবর্তে পপ () ব্যবহার করতে পারেন। এটি মূল অ্যারেটিকেও পরিবর্তন করে তবে এটি আপনার ক্ষেত্রে ঠিক আছে।
চেতন সাস্ট্রি

আমি ভাবছি যে কীভাবে আমরা স্রেফ রাস্তা পেতে একটি সমমনা তৈরি করতে পারি।
টড হোর্স্ট

এরকম কিছু 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);
টড হর্স্ট

নামকরণ " পাত NAME" থেকে নির্দেশিকা / ফাইলের গঠন নাম "বৃক্ষ" প্রাপ্ত করা হয়, প্রথম জিনিস গাছ হয় রুট গত হয় পাতার => ফাইল নামে গত জিনিস গাছ পাথ => পাত :-)
jave। ওয়েব

29

ভাল, আপনার সমাধানটি খালি স্ট্রিং থেকে ইনপুট হিসাবে সুরক্ষা দেয় না। সেক্ষেত্রে এটি ব্যর্থ হয় TypeError: /([^(\\|\/|\:)]+)$/.exec(fullPath) has no properties

বোবিনস, এখানে নিকফের একটি সংস্করণ যা ডস, পসিক্স এবং এইচএফএস পাথ ডিলিমিটারগুলি (এবং খালি স্ট্রিং) পরিচালনা করে:

return fullPath.replace(/^.*(\\|\/|\:)/, '');

4
যদি আমরা এই জেএস কোডটি পিএইচপি-তে লিখছি, আমাদের প্রতিটিটির জন্য একটি অতিরিক্ত
লেনিন রাজ রাজাসেকরণ

17

জাভাস্ক্রিপ্ট কোডের নীচের লাইনটি আপনাকে ফাইলের নাম দেবে।

var z = location.pathname.substring(location.pathname.lastIndexOf('/')+1);
alert(z);

10

নিকফের চেয়ে বেশি সংক্ষিপ্ত নয় উত্তরের , তবে এই উত্তরটি খালি স্ট্রিং দিয়ে অযাচিত অংশগুলি প্রতিস্থাপনের পরিবর্তে সরাসরি উত্তরটি "নিষ্কাশন" করে:

var filename = /([^\\]+)$/.exec(fullPath)[1];

8

"এক্সটেনশন ছাড়াই ফাইলের নাম পান" জিজ্ঞাসা করা একটি প্রশ্ন এখানে উল্লেখ করে তবে এর কোনও সমাধান নেই। এখানে ববির সমাধান থেকে সংশোধন করা সমাধান।

var name_without_ext = (file_name.split('\\').pop().split('/').pop().split('.'))[0];

6

আরেকটা

var filename = fullPath.split(/[\\\/]/).pop();

এখানে বিভাজনের একটি অক্ষর শ্রেণীর সাথে নিয়মিত প্রকাশ হয়
দুটি অক্ষর '\' দিয়ে পালাতে হয়

বা বিভাজক অ্যারে ব্যবহার করুন

var filename = fullPath.split(['/','\\']).pop();

প্রয়োজনে আরও বিভাজককে অ্যারেতে গতিশীলভাবে ঠেলে দেওয়ার উপায় এটি।
যদি আপনার fullPathকোডটিতে স্পষ্টভাবে কোনও স্ট্রিং সেট করা থাকে তবে এটি ব্যাকস্ল্যাশ থেকে বাঁচতে হবে !
মত"C:\\Documents and Settings\\img\\recycled log.jpg"


3

আমি ব্যবহার করি:

var lastPart = path.replace(/\\$/,'').split('\\').pop();

এটি সর্বশেষে প্রতিস্থাপন করে \তাই এটি ফোল্ডারগুলির সাথেও কাজ করে।


2
<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>

1

পুরো উত্তরটি হ'ল:

<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>

1

উইন্ডোজের পুরো পথ থেকে জিএনইউ / লিনাক্স এবং ইউনিক্স পরম পাথ থেকে ফাইলের নাম নির্ধারণ করতে আপনার প্রকল্পের অন্তর্ভুক্ত করার জন্য সামান্য কাজ।

/**
 * @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)
}

0
<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>

1
যদিও এই কোড স্নিপেট একটি ব্যাখ্যা সহ প্রশ্নটি সমাধান করতে পারে, সত্যিই আপনার পোস্টের মান উন্নত করতে সহায়তা করে। মনে রাখবেন যে আপনি ভবিষ্যতে পাঠকদের জন্য প্রশ্নের উত্তর দিচ্ছেন, এবং সেই লোকেরা আপনার কোড পরামর্শের কারণগুলি জানেন না।
ফেরিবিগ

0

সফলভাবে আপনার প্রশ্নের জন্য স্ক্রিপ্ট, সম্পূর্ণ পরীক্ষা

<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)
}


0

এই ফাইলটি 'ফাইলের নাম' এবং 'পথ' উভয়ের জন্যই অনেক সহজ এবং সাধারণ।

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];
}

আপনার কোডে কিছু ব্যাখ্যা যুক্ত করে একটি উত্তরের গুণমান উন্নত করা যেতে পারে। এই উত্তরটির জন্য অনুসন্ধান করা কিছু লোক কোডিং বা নিয়মিত প্রকাশের ক্ষেত্রে নতুন হতে পারে এবং প্রসঙ্গটি দেওয়ার জন্য একটি সামান্য পাঠ বোঝার ক্ষেত্রে অনেক বেশি এগিয়ে যাবে।
jmarkmurphy

আশা করি এইভাবে আরও ভাল হবে :)
হিচাম

-3
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(".") );
}

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.