2012-02-26 5 views
1

ファイル名とファイルタイプを配列に入れたいのですが、答えは(split)ですが、拡張が始まる前に最後のドットを探す方法はわかりません。ファイル名とファイルタイプを配列に入れます

例:Funny - SMS 02.jpgは、Funny - SMS 02を1つの配列に、jpgを別の配列にします。しかし、既にドットが入っているファイルの名前を分割しようとすると、問題が始まります。例えば、fname[0]およびjpgFunny - When you see itをと印刷すると、fname[1]になります。

Funny - When you see it...fname[0]jpgfname[1]として印刷するにはどうすればよいですか?

ありがとうございます。

答えて

0
fname = "Funny - When you see it....jpg" 
parts = fname.split(/\.(?=[^.]*$)/) 
// parts=["Funny - When you see it...", "jpg"] 

?= '先読み' と呼ばれ、基本的に "続く" を意味しています。だから、上の読み取り: "後にドットがない場合はドットで分割"。

+0

これはTomの関数と同じように機能しました。私は1つのソリューションのためにあなたのものを使用します:)ありがとう! – Erik

+0

@ErikEdgren:ファイル名にドットがまったく含まれていない場合や、最後に単一のドットが含まれていると、私たちの関数は動作が異なります(後者の場合はコードを少し修正しました)。 – georg

+0

ああ。 Okej。それから私はそれを知っている:)ありがとう! – Erik

1

これらの種類のタスクでは、分割は通常面倒です。正規表現はより強力です:

var matches = /^(.*)\.([^.]*)$/g.exec("Funny - When you see it....jpg"); 
matches.shift(); 

// matches: 
// ["Funny - When you see it...", "jpg"] 

これは文字列と正規表現とのマッチングを行い、3つの要素を持つ配列になります。最初は完全ではないので、それをシフトする必要があります。文字列アンカーの開始/終了して

^  begin of string 
.*  any amount of any character 
\.  a dot 
[^.]* any amount of any character except a dot 
$  end of string 

.*は最後のドットの前に、すべての文字が含まれている必要があります。

(および)は、一致する部分文字列を配列に追加するグループを示します。

2
var array = []; 
var s = "Funny - When you see it....jpg"; 
var lastDot = s.lastIndexOf("."); 
array[0] = s.substring(0, lastDot); 
array[1] = s.substring(lastDot + 1); 
alert(array[0] + "---" + array[1]); 
+0

非常にうまくいった! :D多くのありがとう!私はできるときにそれをマークします。 – Erik

3
function getFnameExt(filename) { 
    var parts = filename.split('.'), ext = parts.pop(), fname = parts.join('.'); 
    return [ fname, ext ]; 
} 

console.log(getFnameExt("Funny - When you see it....jpg"));