JavaScript'te eğik çizgiden sonra bir dizenin değerini alın


113

Zaten bir saatten fazla bir süredir deniyorum ve muhtemelen oldukça kolay olmasına rağmen bunu yapmanın doğru yolunu bulamıyorum:

Bende böyle bir şey var: foo/bar/test.html

Sonuncudan sonra her şeyi ayıklamak için jQuery kullanmak istiyorum /. Yukarıdaki örnekte çıktı olacaktır test.html.

Sanırım substrve kullanılarak yapılabilir indexOf(), ancak çalışan bir çözüm bulamıyorum.

Yanıtlar:


244

En az üç yol:

Normal bir ifade:

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

... [^/]*dizenin ( $) sonunda "eğik çizgi içermeyen karakter dizisini yakala" ( ) diyor . Ardından, döndürülen eşleşme nesnesinden eşleşen karakterleri, ona dizin oluşturarak alır ( [0]); bir eşleşme nesnesinde, ilk girdi eşleşen dizgenin tamamıdır. Yakalama gruplarına gerek yok.

Canlı örnek

Kullanılması lastIndexOfve substring:

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

lastIndexOfgöründüğü gibi yapar: Bir dizedeki bir karakterin (iyi, dizge) son oluşumunun dizinini bulur, bulunamazsa -1 döndürür. if (n !== -1)Ondan dokuzunda muhtemelen bu dönüş değerini ( ) kontrol etmek istersiniz , ancak yukarıdakine 1 eklediğimiz ve alt dizeyi çağırdığımız için, sonunda str.substring(0)dizeyi döndüren işi yaparız .

kullanma Array#split

Sudhir ve Tom Walters bu konuya burada ve burada değiniyor , ancak sadece eksiksizlik için:

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

split verilen sınırlayıcıyı kullanarak bir dizeyi böler ve bir dizi döndürür.

lastIndexOf/ substringÇözümdür muhtemelen (bir zaman motorlar birbirinden bu kadar radikal değişiklik bu yana, JavaScript ve performansı hakkında hiçbir şey söylemeden dikkatli olmak zorunda olsa da) en verimli, ancak bir döngü içinde kaç kez bu binlerce yapıyoruz sürece, o değil Önemli değil ve kodun netliği için çabalarım.


1
Son eğik çizgiden önce dizeyi döndürmek için bunu nasıl uyarlarsınız? (Yani üst klasörün adını döndürür)
wbadart

28

JQuery'ye ihtiyacınız yoktur ve bunu yapmanın birçok yolu vardır, örneğin:

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

MyString'in dizenizi içerdiği yer.


3
+1 (çalışmak için) jQuery'nin javascript sorunları için her şeyi içeren bir çözüm olmadığına işaret ediyor.
Andrew Jackman

1
Bu hatalı bir çözüm, eğik çizgiyi kurşuna eklerseniz ne olur? 0 döndürür. Peki sümüklü böcek yoksa ne olur? - NaN döndürür! o ne lan? kötü kod
Donatas Cereska

1) Soru, boş olmayan bir girdiyle ilgiliydi 2) Girdi, dosya adlarıyla biten girdilerle ilgiliydi (eğik çizgi yok) 3) Kabul edilen yanıt gerçekten çok daha iyi bir çözüm, dolayısıyla çok sayıda yukarı oy 4) Kendi çözümünüzü ekleyebilirsiniz
Tom Walters

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

9

Deneyin;

var str = "foo / bar / test.html";
var tmp = str.split ("/");
uyarısı (tmp.pop ());

5

Dizenin makul ölçüde kısa olacağını bildiğimde, aşağıdaki tek satırı kullanıyorum ... (ters eğik çizgilerden kaçmayı unutmayın)

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

uyarı ile açılır picture name.jpg


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

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

Artık yol dizesinde last.htm var .


1

hafif ağırlık

string.substring(start,end)

nerede

start = Required. Çıkarma işleminin başlatılacağı konum. İlk karakter 0` dizinindedir.

end = Optional. Ekstraksiyonun nerede sonlandırılacağı konum (en fazla ancak dahil değil). Atlanırsa, dizenin geri kalanını çıkarır.

    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

VEYA

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

'_' Değiştirin || kendi ihtiyacınıza '/'


1

Soruda gerektiği gibi:

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

ve url'de sorulan soru için ('=' ile ilgili bir soru soruldu) ::
[ 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);
  }

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.