Как я могу получить последние символы строки


739

я имею

var id="ctl03_Tabs1";

Используя JavaScript, как я могу получить последние пять символов или последний символ?


6
Чтобы получить последний символ, лучшим вариантом будет id.charAt (id.length-1)
Dilhan Jayathilake,

64
Примечание для читателей: обязательно прочитайте после первого ответа, особенно от @Terence.
Offirmo

Ответы:


1085

РЕДАКТИРОВАТЬ: Как уже указывали другие, используйте slice(-5)вместо substr. Однако см. .split().pop()Решение внизу этого ответа для другого подхода.

Оригинальный ответ:

Вы захотите использовать строковый метод Javascript в .substr()сочетании со .lengthсвойством.

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

Это получает символы, начиная с id.length - 5 и, поскольку второй аргумент для .substr () опущен, продолжается до конца строки.

Вы также можете использовать .slice()метод, как другие указали ниже.

Если вы просто хотите найти символы после подчеркивания, вы можете использовать это:

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

Это разбивает строку на массив в подчеркивании и затем «выталкивает» последний элемент из массива (это та строка, которую вы хотите).


5
Первое решение можно сделать короче и быстрее, см. Мой ответ ниже. Тем не менее, я согласен с идеей раскола и поп в этой конкретной ситуации.
Теренс

3
По сравнению с .slice (-5) и .substr (длина - 5), .split().pop()это большой удар по производительности. Если это то, что вы используете в цикле, а производительность критична, вы должны помнить об этом.
nwayve

7
В вашем тесте .split().pop()по-прежнему 5 миллионов операций в секунду. Это не проблема производительности, пока это не проблема производительности. ;)
Хамон Холмгрен

1
@HutchMoore Вы правы. Я отредактировал свой ответ, чтобы упомянуть, что sliceна данный момент это лучший вариант.
Хамон Холмгрен

1
Если вы пытаетесь применить sliceили substrк числу (int), сначала преобразуйте его в строку. НапримерmyVar.toString().slice(-5)
DNNS

804

Не используйте .substr(). .slice()Вместо этого используйте метод, потому что он совместим с разными браузерами (см. IE).

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

substr () с отрицательным значением не работает в IE


6
Да, срез принимает отрицательные значения, и это здорово! slice()ссылка: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Offirmo

3
Я предпочитаю этот ответ, хотя принятый работает просто отлично.
Дейв Уоттс

3
Это должен быть ответ, использование среза таким способом также более производительно: jsperf.com/slice-vs-substr-and-length
thevinchi

Chrome 55, кажется, думает, что substr на 20% быстрее
fantapop

6
Я полагаю, срез будет работать, только если он соответствует? что если конец был _Tabs15? ломтик (-5) будет только захватить abs15? сплит / поп работает намного лучше для разной длины ...
Брайан Рэмси

68

Вы можете использовать метод substr () с отрицательной начальной позицией, чтобы получить последние n символов. Например, это получает последние 5:

var lastFiveChars = id.substr(-5);

Лучший и короткий ответ. Не нужно знать исходную длину строки (для текущих браузеров, поэтому мы исключаем IE)
Thanh Trung

60

Получить последний символ легко, так как вы можете рассматривать строки как массив:

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

Чтобы получить фрагмент строки, вы можете использовать функцию substr или функцию 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

Разница между substrи substringзаключается в том, как обрабатывается второй (необязательный) параметр. In substr, это количество символов из индекса (первый параметр). Во- substringпервых, это индекс того, где должна заканчиваться нарезка символов.


1
у вас опечатка должна быть субсбр субстра
Джордж

24

Следующий скрипт показывает результат для получения последних 5 символов и последнего 1 символа в строке с использованием JavaScript:

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

Вывод :

Tabs1 // получил 5 символов

1 // Получил 1 символ


4
Не совместим с IE, смотрите мой ответ.
Теренс


7

Нет необходимости использовать substrметод, чтобы получить один символ строки!

на примере Jamon Holmgren мы можем изменить метод substr и просто указать положение массива:

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

5

Функция Substr позволяет вам использовать минус, чтобы получить последний символ.

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

Это очень гибкий. Например:

// 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

Один способ будет использовать slice, как следовать:

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

так что значение tempбудет "Tabs1".


3

Если вы просто хотите, чтобы последний символ или любой символ находился в известной позиции, вы можете просто обработать строку как массив! - строки могут быть повторяемы в JavaScript -

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

Тем не менее, если вам нужно больше, чем один символ, использование сплайсинга эффективно

x.slice(-5);      //world

Что касается вашего примера

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

Для извлечения идентификатора вы можете легко использовать split + pop

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

Это вернет идентификатор или не определено, если после 'rating_element' не было идентификатора :)


2

Предполагая, что вы будете сравнивать подстроку с концом другой строки и использовать результат как логическое значение, вы можете расширить класс String для достижения этой цели:

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

Позволяет вам сделать следующее:

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

Я нашел этот вопрос, и в результате некоторых исследований я обнаружил, что это самый простой способ получить последнего персонажа.

Как уже упоминали и добавили для полноты, чтобы получить последние 5:

var last5 = id.substr(-5);

0

Этот удалит запятую, если это последний символ в строке.

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

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

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

}

4
Это почти не имеет отношения к первоначальному вопросу.
silasjmatson

0

На самом деле у меня есть следующая проблема, и вот как я решил ее с помощью приведенного выше ответа, но другой подход в извлечении идентификатора из элемента ввода.

Я приложил входной файл с

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

И когда эта кнопка нажата, я хочу извлечь идентификатор (который является числом) или только php ID ($ id) .

Итак, что я делаю.

 $('.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

Последние 5

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

Прошлой

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


Для первого примера измените charAtна substr. Это charAtполучает пятое место из-прошлого .
Обычный Джо

-1

Я уверен, что это будет работать ....

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

Значение extensionбудет".pdf"

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.