Jak mogę uzyskać ostatnie znaki ciągu

736

mam

var id="ctl03_Tabs1";

Używając JavaScript, w jaki sposób mogę uzyskać ostatnie pięć znaków lub ostatni znak?

użytkownik695663
źródło
6
Aby uzyskać ostatnią postać, najlepszą opcją byłoby id.charAt (id.length-1)
Dilhan Jayathilake
64
Uwaga dla czytelników: pamiętaj o przeczytaniu pierwszej odpowiedzi, zwłaszcza tej z @Terence.
Offirmo
2
Możliwy duplikat tego, jak uzyskać ostatni znak ciągu?
Stephan Weinhold

Odpowiedzi:

1085

EDYCJA: Jak zauważyli inni, użyj slice(-5)zamiast substr. Jednak zobacz .split().pop()rozwiązanie na dole tej odpowiedzi, aby uzyskać inne podejście.

Oryginalna odpowiedź:

Będziesz chciał użyć metody ciągu JavaScript w .substr()połączeniu z .lengthwłaściwością.

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

Pobiera to znaki zaczynające się od id.length - 5 i, ponieważ pominięto drugi argument dla .substr (), przechodzi do końca łańcucha.

Możesz także użyć tej .slice()metody, jak wskazali inni poniżej.

Jeśli chcesz po prostu znaleźć postacie po znaku podkreślenia, możesz użyć tego:

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

To dzieli ciąg na tablicę podkreślenia, a następnie „wyskakuje” ostatni element z tablicy (czyli ciąg, który chcesz).

Jamon Holmgren
źródło
5
Pierwsze rozwiązanie może być krótsze i szybsze, patrz moja odpowiedź poniżej. Zgadzam się jednak z pomysłem split i pop w tej konkretnej sytuacji.
Terence
3
W porównaniu do .slice (-5) i .substr (długość - 5), .split().pop()jest dużym hitem wydajności. Jeśli używasz tego w pętli, a wydajność ma krytyczne znaczenie, powinieneś o tym pamiętać.
nwayve
7
W teście .split().pop()jest jeszcze 5 milionów operacji na sekundę. To nie jest problem z wydajnością, dopóki nie jest to problem z wydajnością. ;)
Jamon Holmgren
1
@HutchMoore Masz rację. Zredagowałem moją odpowiedź, aby wspomnieć, że slicew tym momencie jest to lepsza opcja.
Jamon Holmgren,
1
Jeśli próbujesz zastosować slicelub substrnumer (int), najpierw przekonwertuj go na ciąg znaków. Np.myVar.toString().slice(-5)
dnns
803

Nie używać .substr(). .slice()Zamiast tego użyj tej metody, ponieważ jest kompatybilna z wieloma przeglądarkami (patrz IE).

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

substr () z wartością ujemną nie działa w IE

Terence
źródło
6
Tak plasterek akceptuje wartości ujemne, co jest świetne! slice()referencja: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Offirmo
3
Wolę tę odpowiedź, choć ta zaakceptowana działa dobrze.
Dave Watts
3
Powinno to być odpowiedź, wykorzystując kawałek ten sposób jest również bardziej wydajnych: jsperf.com/slice-vs-substr-and-length
thevinchi
Chrome 55 wydaje się uważać, że substr jest o 20% szybszy
fantapop
6
Zakładam, że plasterek będzie działał tylko wtedy, gdy będzie spójny? co jeśli koniec był _Tabs15? plasterek (-5) złapałby tylko abs15? split / pop działa znacznie lepiej dla różnych długości ...
Brian Ramsey,
65

Możesz użyć metody substr () z ujemną pozycją początkową, aby pobrać ostatnie n znaków. Na przykład dostaje to ostatnie 5:

var lastFiveChars = id.substr(-5);
użytkownik682701
źródło
Najlepsza i krótka odpowiedź. Nie trzeba znać oryginalnej długości łańcucha (dla obecnych przeglądarek, dlatego wykluczamy IE)
Thanh Trung
60

Uzyskanie ostatniego znaku jest łatwe, ponieważ możesz traktować ciągi jako tablicę:

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

Aby uzyskać sekcję ciągu, możesz użyć funkcji substr lub funkcji substring :

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

Różnica między substri substringto, jak traktowany jest drugi (opcjonalny) parametr. W substrto liczba znaków z indeksu (pierwszy parametr). W substring, to indeks gdzie krojenie postać powinna kończyć.

Zirak
źródło
1
masz literówkę susbstr powinien być substr
George
24

Poniższy skrypt pokazuje wynik uzyskiwania ostatnich 5 znaków i ostatniego 1 znaku w ciągu za pomocą JavaScript:

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

Wynik :

Tabs1 // Mam 5 znaków

1 // Dostałem 1 postać

Tamil
źródło
4
Niezgodny z IE, patrz moja odpowiedź.
Terence
7

Sprawdź funkcję podciągania .

Aby uzyskać ostatnią postać:

id.substring(id.length - 1, id.length);
Chewpers
źródło
7

Nie ma potrzeby używania substrmetody, aby uzyskać pojedynczy znak ciągu!

na przykładzie Jamona Holmgrena możemy zmienić metodę substr i po prostu określić pozycję tablicy:

var id = "ctl03_Tabs1";
var lastChar = id[id.length - 1]; // => "1"
Nello Ollen
źródło
5

Funkcja Substr pozwala na użycie minusa, aby uzyskać ostatni znak.

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

Jest bardzo elastyczny. Na przykład:

// 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"
Adam Whateverson
źródło
4

Jednym ze sposobów byłoby użycie slice, na przykład:

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

więc wartość tempbędzie "Tabs1".

Keivan
źródło
3

Jeśli chcesz tylko ostatni znak lub dowolny znak w znanej pozycji, możesz po prostu wyciąć ciąg znaków jako tablicę! - ciągi są iterowalne w javascript -

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

Jednak jeśli potrzebujesz więcej niż jednej postaci, użycie splajnu jest skuteczne

x.slice(-5);      //world

Jeśli chodzi o twój przykład

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

Aby wyodrębnić identyfikator, możesz łatwo użyć split + pop

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

Spowoduje to zwrócenie identyfikatora lub niezdefiniowanie, jeśli po „rating_element” nie będzie żadnego identyfikatora :)

Zalaboza
źródło
2

Zakładając, że porównasz podłańcuch z końcem innego łańcucha i użyjesz wyniku jako wartości logicznej, możesz rozszerzyć klasę String, aby to osiągnąć:

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

Umożliwiając wykonanie następujących czynności:

var aSentenceToPonder = "This sentence ends with toad"; 
var frogString = "frog";
var toadString = "toad";
aSentenceToPonder.endsWith(frogString) // false
aSentenceToPonder.endsWith(toadString) // true
mikeborgh
źródło
1
var id="ctl03_Tabs1";
var res = id.charAt(id.length-1);

Znalazłem to pytanie i dzięki niektórym badaniom odkryłem, że jest to najłatwiejszy sposób na uzyskanie ostatniej postaci.

Jak inni wspominali i dodali dla kompletności, aby uzyskać ostatnie 5:

var last5 = id.substr(-5);
Andrew Mallonee
źródło
0

Ten usunie przecinek, jeśli jest to ostatni znak w ciągu.

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

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

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

}
Vijay Yaragall
źródło
4
Nie ma to prawie żadnego związku z pierwotnym pytaniem.
silasjmatson
0

Właściwie mam następujący problem i oto jak go rozwiązałem za pomocą powyższej odpowiedzi, ale inne podejście w wydobywaniu id z elementu wejściowego.

Dołączyłem dane wejściowe złożone w

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

Po kliknięciu tego przycisku chcę wyodrębnić tylko identyfikator (czyli liczbę) lub identyfikator php ($ id) .

Więc tutaj co robię.

 $('.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
        });
Daniel Adenew
źródło
0

Ostatnie 5

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

Ostatni, ubiegły, zeszły

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

rajmobiapp
źródło
W pierwszym przykładzie zmień charAtna substr. To charAtzajmuje piąte miejsce od ostatniego .
Zwykły Joe
-1

Jestem pewien, że to zadziała ....

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

Wartość extensionbędzie".pdf"

Jamil Moughal
źródło