Bir dizenin son karakterlerini nasıl alabilirim


Yanıtlar:


1085

EDIT: Diğerleri belirttiği gibi, slice(-5)yerine kullanın substr. Ancak, .split().pop()başka bir yaklaşım için bu cevabın altındaki çözüme bakınız .

Orijinal cevap:

Javascript dize yöntemini kullanmak isteyeceksiniz .substr()kombine .lengthözelliği.

var id = "ctl03_Tabs1";
var lastFive = id.substr(id.length - 5); // => "Tabs1"
var lastChar = id.substr(id.length - 1); // => "1"

Bu, id.length - 5 ile başlayan karakterleri alır ve .substr () için ikinci argüman atlandığı için dizenin sonuna kadar devam eder.

.slice()Yöntemi, aşağıda belirtildiği gibi kullanabilirsiniz .

Alt çizgiden sonra karakterleri bulmak istiyorsanız, bunu kullanabilirsiniz:

var tabId = id.split("_").pop(); // => "Tabs1"

Bu, dizeyi alt çizgideki bir diziye böler ve sonra dizinin son öğesini (istediğiniz dizgi) "açar".


5
İlk çözüm daha kısa ve daha hızlı yapılabilir, aşağıdaki cevabıma bakın. Ancak, bu özel durumdaki bölünmüş ve pop fikri kabul ediyorum.
Terence

3
Kıyasla .slice (5) ve .substr (uzunluk - 5) için, .split().pop()büyük bir performans isabet. Bu bir döngüde kullandığınız bir şeyse ve performans kritikse, bunu aklınızda tutmak istersiniz.
nwayve

7
Testinizde .split().pop()hala saniyede 5 milyon işlem var. Bir performans sorunu olana kadar bu bir performans sorunu değildir. ;)
Jamon Holmgren

1
@HutchMoore Doğru. sliceBu noktada daha iyi bir seçenek olduğunu belirtmek için cevabımı düzenledim .
Jamon Holmgren

1
sliceVeya substrbir sayıya (int) uygulamaya çalışıyorsanız , önce dizeye dönüştürün. ÖrnmyVar.toString().slice(-5)
dnns

803

Kullanma .substr(). .slice()Bunun yerine, çapraz tarayıcı uyumlu olduğu için yöntemi kullanın (bkz. IE).

const id = "ctl03_Tabs1";
console.log(id.slice(id.length - 5)); //Outputs: Tabs1
console.log(id.slice(id.length - 1)); //Outputs: 1

IE'de negatif değere sahip olmayan substr ()


6
Evet dilim büyük olan negatif değerleri kabul eder! slice()başvuru: developer.mozilla.org/tr-TR/docs/Web/JavaScript/Reference/…
Offirmo

3
Bu cevabı tercih ediyorum, ancak kabul edilen iyi çalışıyor.
Dave Watts

3
Bu cevap olmalı, dilimi bu şekilde kullanmak da daha performanslı: jsperf.com/slice-vs-substr-and-length
thevinchi

Chrome 55,
substr'un

6
Dilim sadece onun tutarlı çalışır varsayalım? ya son olsaydı _Tabs15? dilim (-5) sadece kapmak abs15? split / pop çeşitli uzunluklar için çok daha iyi çalışıyor ...
Brian Ramsey

66

Sen kullanabilirsiniz substr () yöntemini son n karakterleri almak için bir negatif başlangıç pozisyonuna sahip. Örneğin, bu son 5'i alır:

var lastFiveChars = id.substr(-5);

En iyi ve kısa cevap. Orijinal dize uzunluğunu bilmenize gerek yok (mevcut tarayıcılar için IE'yi hariç tutuyoruz)
Thanh Trung

60

Dizeleri dizi olarak ele alabileceğiniz için son karakteri elde etmek kolaydır:

var lastChar = id[id.length - 1];

Bir dize bir bölümünü almak için, kullanabilir substr fonksiyonu veya alt dize işlevi:

id.substr(id.length - 1); //get the last character
id.substr(2);             //get the characters from the 3rd character on
id.substr(2, 1);          //get the 3rd character
id.substr(2, 2);          //get the 3rd and 4th characters

Arasındaki fark substrve substringikinci (isteğe bağlı) parametresi işlenir nasıl. İçinde substr, dizindeki karakterlerin miktarıdır (ilk parametre). İçinde substring, karakter dilimlemenin nerede bitmesi gerektiğidir.


1
bir yazım hatası susbstr substr olmalı
George

24

Aşağıdaki komut dosyası, JavaScript kullanarak bir dizede son 5 ve son 1 karakterin sonucunu gösterir:

var testword='ctl03_Tabs1';
var last5=testword.substr(-5); //Get 5 characters
var last1=testword.substr(-1); //Get 1 character

Çıktı :

Sekmeler1 // 5 karakter var

1 // 1 karakter var


4
IE ile uyumlu değil, cevabıma bakın.
Terence


7

substrBir dizenin tek bir karakterini elde etmek için yöntem kullanmaya gerek yoktur !

Jamon Holmgren örneğini alarak substr yöntemini değiştirebilir ve sadece dizi konumunu belirleyebiliriz:

var id = "ctl03_Tabs1";
var lastChar = id[id.length - 1]; // => "1"

5

Substr işlevi son karakteri almak için eksi kullanmanızı sağlar.

var string = "hello";
var last = string.substr(-1);

Çok esnektir. Örneğin:

// Get 2 characters, 1 character from end
// The first part says how many characters
// to go back and the second says how many
// to go forward. If you don't say how many
// to go forward it will include everything
var string = "hello!";
var lasttwo = string.substr(-3,2);
// = "lo"

4

Aşağıdaki gibi bir yol kullanılır slice:

var id="ctl03_Tabs1";
var temp=id.slice(-5);

yani değeri tempolurdu "Tabs1".


3

Eğer sadece son karakteri veya herhangi bir karakteri bilmek pozisyonda istiyorsanız sadece dizi olarak dizi trat! - dizeler javascriptte yinelenebilir -

Var x = "hello_world";
 x[0];                    //h
 x[x.length-1];   //d

Eğer sadece bir karakterden fazlasına ihtiyacınız varsa splice kullanmak etkilidir

x.slice(-5);      //world

Örneğinizle ilgili olarak

"rating_element-<?php echo $id?>"

Kimliği ayıklamak için split + pop tuşlarını kolayca kullanabilirsiniz

Id= inputId.split('rating_element-')[1];

Bu, kimliği döndürür veya 'rating_element' öğesinden sonra hiçbir kimlik yoksa tanımsızdır :)


2

Alt dizeyi başka bir dizenin sonuna göre karşılaştıracağınızı ve sonucu bir boole olarak kullandığınızı varsayarak, bunu gerçekleştirmek için String sınıfını genişletebilirsiniz:

String.prototype.endsWith = function (substring) {
  if(substring.length > this.length) return false;
  return this.substr(this.length - substring.length) === substring;
};

Aşağıdakileri yapmanızı sağlar:

var aSentenceToPonder = "This sentence ends with toad"; 
var frogString = "frog";
var toadString = "toad";
aSentenceToPonder.endsWith(frogString) // false
aSentenceToPonder.endsWith(toadString) // true

1
var id="ctl03_Tabs1";
var res = id.charAt(id.length-1);

Bu soruyu buldum ve bazı araştırmalarla bunu son karakteri elde etmenin en kolay yolu olarak buldum.

Diğerlerinin de belirttiği ve son 5'i almak için tamlık için eklediği gibi:

var last5 = id.substr(-5);

0

Dizedeki son karakter ise virgül kaldırılır.

var str = $("#ControlId").val();

if(str.substring(str.length-1)==',') {

  var stringWithoutLastComma = str.substring(0,str.length-1);    

}

4
Bunun orijinal soru üzerinde neredeyse hiçbir etkisi yoktur.
silasjmatson

0

Aslında aşağıdaki sorun var ve bu nasıl yukarıdaki cevap yardımı ile çözüldü ama id formu bir ayıklama ayıklamak farklı bir yaklaşım.

İle dosyalanmış bir girdi ekledim

id="rating_element-<?php echo $id?>"

Ve, bu düğme tıklandığında sadece id (sayı) veya php ID ($ id) ayıklamak istiyorum .

İşte burada ne yapıyorum.

 $('.rating').on('rating.change', function() {
            alert($(this).val());
           // console.log(this.id);
           var static_id_text=("rating_element-").length;       
           var product_id =  this.id.slice(static_id_text);       //get the length in order to deduct from the whole string    
          console.log(product_id );//outputs the last id appended
        });

0

Son 5

var id="ctl03_Tabs1";
var res = id.charAt(id.length-5)
alert(res);

Son

   
 var id="ctl03_Tabs1";
 var res = id.charAt(id.length-1)
alert(res);


İlk Örneğin, değiştirmek charAtiçin substr. Bu sondan beşinciyicharAt alır .
Düzenli Joe

-1

Eminim bu işe yarar ....

var string1="myfile.pdf"
var esxtenion=string1.substr(string1.length-4)

Değeri extensionolacak".pdf"

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.