Як я можу отримати останні символи рядка


737

Я маю

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)
днн

803

Не використовуйте .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? спліт / поп працює набагато краще для різної довжини ...
Брайан Рамзі

66

Ви можете використовувати Для отримання останніх n символів метод substr () з негативним вихідним положенням. Наприклад, це отримує останні 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полягає в тому, як обробляється другий (необов'язковий) параметр. В substr, це кількість символів з індексу (перший параметр). В substringіндексі, де має закінчуватися нарізка символів.


1
у вас друкарська помилка повинна бути substr
Джордж

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 метод для отримання єдиного символу рядка!

беручи приклад Джеймона Холмгрена, ми можемо змінити метод 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) .

Так ось що я роблю.

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