社内の掲示板に属するWebアプリケーションを制作しております。
複数のファイルをアップロードするために、<input type="file" ...>
で得たファイルのパスを一時的にリストに表示させる仕様になりました。
そこで、javascriptの正規表現オブジェクトで次のようなフルパスから
ファイル名のみを抽出することを考えました。
a: c:\hoge.txt
b: \\foo_server\foo_dir\hoge2.txt
a,bから、それぞれ
hoge.txt
hoge2.txt
を得るために、/[^\\].*/によって \\を取り除いた後で/\\.*\..*$/
によって欲しい文字列が得られると考えましたら文字列どころか何も
得られませんでした。
/[^\\].*/までは動いているようです。
オブジェクトの使い方が誤っていると考えているのですが、どの様に
扱えばよいのか皆目見当がつかなくなりました。
大変お手数ですが、ご教示願います。
No.6ベストアンサー
- 回答日時:
なるほど、大体わかりました。
失礼ですが、正規表現をあまり把握されていないようですね。正規表現は便利な反面少し難しいので、なれないうちはBLUEPIXYさんのおっしゃるような原始的な方法でがんばるほうがいいかもしれませんよ。
しかしそれでは質問に答えたことにはならないので、とりあえず回答します。
まずこれ
/[^\\].*/
これは、文字列の中から1文字目が\ではなくその後任意の文字が続くという意味です。そのため、この時点ですでにうまく動いていないはずだと思うんですけど…。
とりあえず私ならこうするよというソースを貼っておきます。これだけです。後ろから見て\以外の文字列のところだけ取る。簡単でしょ?
myRE = /[^\\]*$/;
result = fn.match(myRE);
alert(result);
ご教示大変ありがとうございました。
業務上迫られjavascriptの参考書首っ引きでコードを書いております。
仰るとおり正規表現につきましては軽くどころかカナリヤバイ状態です。
これを機に頭に叩き込む所存です。
No.5
- 回答日時:
<input type="file" ...>で選択したファイルのパスって、JavaScriptじゃ取得不可だったように記憶してるんですけど、取れるの確認しました?
ちなみに、No.4の補足のスクリプトは、\\でなきゃいけないところが\になってるのがうまくいかない原因です。
ついでに、パスからファイル名の取り出しは、
var result = str1.split(/[\\\/]/).pop();
でもできますよ。これだとパス区切りが\でも/でもOKです。
No.4
- 回答日時:
>「\」全てが削除されて文字列が連結した状態になります。
substrとlastIndexOfでそんな動作にはなりません。
”「\」全てが削除されて”
というのは、多分、matchによるものだと思います。
ごっちゃにされませんように・
あと、いまさらですが、ファイルの階層の区切りはwindowsでは「\」ですが、他のシステムではそうとは限りません。UNIXやmac
この回答への補足
度々の回答ありがとうございます。お手数おかけしております。
ごっちゃにはしておりません。試した上で補足質問させて頂いております。
下記のコードで試しましたが、私のwindows環境では連結してしまいます
var str1 = "\\abcd\efgh\ijkl\mnop.txt";
var result = str1.substr(str1.lastIndexOf("\\")+1);
alert(result);
上のコードはBLUEPIXY様の試されたコードとは違う結果になるという
ことでしょうか。
No.3
- 回答日時:
>lastIndexOfでは「\」は検索できないようです。
いや、使えますって、
IEとFireFoxで確認しましたが大丈夫でした。
var fn = document.strdata.upfile1.value;
var result=fn.substr(fn.lastIndexOf("\\")+1);
でいけると思います
この回答への補足
検索できないと記述しましたが、動かしてみますと
「\」全てが削除されて文字列が連結した状態になります。
必要なデータは最後の\の右側の文字列のみです。
このような結果になりまして、検索できないのかな…と考えました。
No.2
- 回答日時:
まず、現状のソースを貼ってください。
この回答への補足
質問閲覧ありがとうございます。
var ele = document.createElement("option");
myRE = /[^\\].*/;
var fn = strdata.upfile1.value;
result = fn.match(myRE);
myRE2 = /\..*$/;
result2 = result.match(myRE2);
ele.value = fn;
var str = document.createTextNode(result2);
どうもmyRE2でおかしくなっているようです。
「\」がちゃんと扱えているのかどうかが怪しいところです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- Visual Basic(VBA) VBAでの共有パスにつきまして 1 2023/03/04 17:24
- Excel(エクセル) フォルダ内のワードファイルをPDFに一括変換するVBA 3 2023/06/09 16:51
- Visual Basic(VBA) 動かなくなってしまった古いVBAを動くようにしたい 8 2022/09/20 13:57
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/08/09 10:33
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
- Visual Basic(VBA) VBA★PDFをPDFアプリで印刷しようと思っていますが上手くゆきません 1 2022/06/06 22:04
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/15 15:48
- Visual Basic(VBA) シートをコピーする下記記述でダイアログを用いた記述がわかりません?( A = Dir(ThisWor 4 2022/08/22 12:26
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ローカルフォルダにあるPHPファ...
-
csvファイルを読み込み、該当項...
-
javascriptでフォルダ内のファ...
-
contenteditableで編集した内容...
-
XMLHttpRequestを繰り返すと・・・
-
テキストファイルの更新日時を取得
-
JSPの処理の途中で、JavaScript...
-
Vba SelStart、SelLen教えてく...
-
デザイン時のVisible=Falseは実...
-
ASP(VBS) ←→ JavaScript の変数...
-
C#でTextBoxに数値のみ入力可能...
-
フォルダを自動で開く
-
初心者です。gulpでコンパイル...
-
リクエスト結果が一瞬しか表示...
-
resizeToメソッドが動作しません
-
1つのVBAコードをすべてのコア...
-
フォルダ内のファイル名を取得...
-
VC#でテキストボックスに変数の...
-
JavaScriptで ブラウザの閉じる...
-
正整数の半角数字かどうか判定する
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
htmlのfileタグに自動で値を入...
-
csvファイルを読み込み、該当項...
-
ページを一回だけリロードさせ...
-
テキストファイルの更新日時を取得
-
javascriptでエクセルデータ読...
-
JavascriptでのExcel起動について
-
javascriptでフォルダ内のファ...
-
外部ファイルからの値の取得
-
JSでファイル数取得
-
JAVAスクリプトで商品コードか...
-
contenteditableで編集した内容...
-
javascriptでJSONを取得する方法
-
jsファイルを閲覧者がダウンロ...
-
JavaScript(ライブラリ)のキ...
-
InDesign javascript について
-
ディレクトリにあるファイルの...
-
フォルダ内のファイル一覧
-
Win版IllustratorCS3でJavascri...
-
IEから、ローカルマシンのTEXT...
-
直下のディレクトリのファイル...
おすすめ情報