2017-02-13 9 views
0

ドキュメントの名前を変更しようとしていますが、最後の'\'の後にすべてのコンテンツを削除して別の名前を付けたいとします。最後の ''の後にすべてのコンテンツを削除する

私はこのようにそれをやったが、それは動作していないようです:

var newDocName = documentPath.replace(/\/$/, ''); 
var newDocName = newDocName + "\test.pdf"; 

'\'は、コードの最初の行の後に削除されません。

私は間違って何を考えていますか?

+2

間違った正規表現。現時点では、 '/'で終わる文字列を検索してからstringの終わりを探します。最後の '/'の後にコンテンツがある場合は、何も見つかりません。バックスラッシュの場合は\\に変更し、最後に\の後ろにテキストがあるかどうかを確認するためにいくつかの量子を追加する必要があります。最後のスラッシュとindexOfを正規表現の代わりに使用することもできます。 – Shilly

+0

どのようにローカルファイルシステムにブラウザでアクセスしていますか? ''? – zer00ne

答えて

4

/\/$/あなたが/と一致することを意味します最後の文字は/、それが文字列の最後にある場合に限ります。

あなたが最後\後コンテンツを削除したい場合は、あなたが最後の要素以外のすべてを取得するためにsliceを使用し、その後\の上で文字列を分割するsplitの組み合わせを使用することができます。最後に、joinを使用して、すべてを戻します。

var uri = 'path\\to\\my\\file.ext'; 
 
var parts = uri.split('\\'); 
 
var withoutFile = parts.slice(0, parts.length - 1); 
 
var putItBackTogether = withoutFile.join('\\'); 
 
var voila = putItBackTogether + '\\new-file.name'; 
 
console.log(voila);

+2

これまでは完全な回答のみでした。他の答えは最後のバックスラッシュの後にファイル名があることを忘れています。 – Shilly

+1

優秀な回答、ありがとう! – user3378165

1

スラッシュです。\\ isteadを使用してください。

0

のためにそれを代用してください:

var newDocName = documentPath.replace(/\\/$/, ''); 
0

あなたの正規表現が悪いの形式になっています。あなたは(\を)あなたのバッククォートをエスケープする必要があります。

だから、それはすることがあります。

var newDocName = documentPath.replace(/[\\/]$/, ''); 
var newDocName = newDocName + "\\test.pdf"; 

この正規表現は、あなたのパスの終わり($)で\または/を検索します。 regex101を使用して、正規表現をテストできます。

また、あなたがそれらを必要としないとき正規表現を使用しないで検討する必要があります。それは、このコードを意味する文字列の最後の文字が置き換わるかどう

var newDocName = documentPath[documentPath.length - 1] == "\\" ? documentPath + "test.pdf" : documentPath + "\\test.pdf"; 
関連する問題