JavaScriptでスラッシュの後の文字列の値を取得する


112

私はすでに1時間以上試しており、それを行うための正しい方法を見つけることができませんが、おそらく簡単です。

私はこのようなものを持っています: foo/bar/test.html

私はjQueryを使用して、最後のすべてを抽出したいと思い/ます。上記の例では、出力はになりますtest.html

substrand を使用してそれを行うことができると思いindexOf()ますが、実用的な解決策を見つけることができません。

回答:


243

少なくとも3つの方法:

正規表現:

var result = /[^/]*$/.exec("foo/bar/test.html")[0];

...これは[^/]*、文字列の最後に「スラッシュを含まない一連の文字をつかむ」()と表示します($)。次に、返された一致オブジェクトからインデックスを作成して、一致した文字を取得します([0]); 一致オブジェクトでは、最初のエントリは一致した文字列全体です。キャプチャグループは必要ありません。

実例

使用するlastIndexOfsubstring

var str = "foo/bar/test.html";
var n = str.lastIndexOf('/');
var result = str.substring(n + 1);

lastIndexOf文字列内で最後に出現した文字(文字列)のインデックスを検索し、見つからない場合は-1を返します。10回のうち9回は、その戻り値(if (n !== -1))を確認する必要がありますが、上記では1を追加して部分文字列を呼び出しているため、最終的str.substring(0)に文字列を返すだけです。

使用する Array#split

SudhirとTom Waltersはここここでこれをカバーていますが、完全を期すためです。

var parts = "foo/bar/test.html".split("/");
var result = parts[parts.length - 1]; // Or parts.pop();

split 指定された区切り文字を使用して文字列を分割し、配列を返します。

lastIndexOf/ substringソリューションは、おそらく(1は必ずエンジンが互いにので、根本的に変化するので、JavaScriptとパフォーマンスについては何も言って注意する必要があるが)最も効率的な、しかし、あなたは、ループ内での時間のこの何千ものをやっていない限り、それはdoesnの問題ではないので、コードを明確にするために努力します。


1
最後のスラッシュの前に文字列を返すようにこれをどのように調整しますか?(つまり、親フォルダーの名前を返します)
wbadart '22

28

jQueryは必要ありません。たとえば、jQueryを実行する方法はたくさんあります。

var parts = myString.split('/');
var answer = parts[parts.length - 1];

myStringには文字列が含まれます。


3
+1(動作用)は、jQueryがJavaScriptの問題のすべての解決策ではないことを示しています。
Andrew Jackman

1
これはバグの多いソリューションです。スラッグにスラッシュを追加するとどうなりますか?それは0を返します。そして、スラッグがないとどうなりますか?-NaNを返します!wtf?不正なコード
Donatas Cereska、2014

1)質問はnullではない入力に関連していました2)入力はファイル名(スラッシュなし)で終わる入力に関連していました3)受け入れられた回答は確かにはるかに優れた解決策であり、したがって多数の賛成票4)独自のソリューションを追加できます
Tom Walters、

12
var str = "foo/bar/test.html";
var lastSlash = str.lastIndexOf("/");
alert(str.substring(lastSlash+1));


5

文字列がかなり短くなることがわかっている場合は、次の1つのライナーを使用します...(バックスラッシュをエスケープすることを忘れないでください)

// if str is C:\windows\file system\path\picture name.jpg
alert( str.split('\\').pop() );

アラートがポップアップします picture name.jpg


2
String path ="AnyDirectory/subFolder/last.htm";
int pos = path.lastIndexOf("/") + 1;

path.substring(pos, path.length()-pos) ;

これで、パス文字列にlast.htmが含まれました。


1

軽い重さ

string.substring(start,end)

どこ

start = Required。抽出を開始する位置。最初の文字はインデックス0`にあります。

end = Optional。抽出を終了する位置(最大、ただし含まない)。省略すると、残りの文字列が抽出されます。

    var string = "var1/var2/var3";

    start   = string.lastIndexOf('/');  //console.log(start); o/p:- 9
    end     = string.length;            //console.log(end);   o/p:- 14

    var string_before_last_slash = string.substring(0, start);
    console.log(string_before_last_slash);//o/p:- var1/var2

    var string_after_last_slash = string.substring(start+1, end);
    console.log(string_after_last_slash);//o/p:- var3

または

    var string_after_last_slash = string.substring(start+1);
    console.log(string_after_last_slash);//o/p:- var3

1

jquery:

var afterDot = value.substr(value.lastIndexOf('_') + 1);

JavaScript:

var myString = 'asd/f/df/xc/asd/test.jpg'
var parts    = myString.split('/');
var answer   = parts[parts.length - 1];
console.log(answer);

'_'を置き換える|| 自分のニーズに「/」


1

質問で必要に応じて::

var string1= "foo/bar/test.html";
  if(string1.contains("/"))
  {
      var string_parts = string1.split("/");
    var result = string_parts[string_parts.length - 1];
    console.log(result);
  }  

そして、URLで尋ねられた質問( '='の1つの出現について尋ねられました)::
[ http://stackoverflow.com/questions/24156535/how-to-split-a-string-after-a-particular-character-in -jquery] [1]

var string1= "Hello how are =you";
  if(string1.contains("="))
  {
      var string_parts = string1.split("=");
    var result = string_parts[string_parts.length - 1];
    console.log(result);
  }

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.