ฉันจะรับอักขระตัวสุดท้ายของสตริงได้อย่างไร


738

ฉันมี

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) และ. Substration (ความยาว - 5) .split().pop()ถือว่าเป็นประสิทธิภาพที่ยอดเยี่ยม หากนี่คือสิ่งที่คุณใช้ในการวนซ้ำและประสิทธิภาพเป็นสิ่งสำคัญคุณจะต้องคำนึงถึงเรื่องนี้เสมอ
nwayve

7
ในการทดสอบของคุณ.split().pop()ยังคงมีการดำเนินงาน 5 ล้านต่อวินาที มันไม่ใช่ปัญหาด้านประสิทธิภาพจนกว่าจะเป็นปัญหาด้านประสิทธิภาพ ;)
Jamon Holmgren

1
@HutchMoore คุณถูกต้อง ฉันได้แก้ไขคำตอบของฉันเพื่อพูดถึงว่าsliceเป็นตัวเลือกที่ดีกว่าในตอนนี้
Jamon Holmgren

1
หากคุณพยายามที่จะนำไปใช้sliceหรือsubstrเป็นตัวเลข (int) ให้แปลงเป็นสตริงก่อน เช่นmyVar.toString().slice(-5)
dnns

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

3
ฉันชอบคำตอบนี้ แต่คนที่ยอมรับก็ใช้ได้ดี
Dave Watts

3
นี่ควรเป็นคำตอบโดยใช้ส่วนนี้ด้วยวิธีที่มีประสิทธิภาพมากขึ้น: jsperf.com/slice-vs-substr-and-length
thevinchi

ดูเหมือนว่า Chrome 55 จะคิดว่าพื้นผิวนั้นเร็วกว่า 20%
fantapop

6
ฉันคิดว่าชิ้นจะใช้ได้ก็ต่อเมื่อสอดคล้องกันเท่านั้น? เกิดอะไรขึ้นถ้าจุดจบคือ_Tabs15อะไร? ชิ้น (-5) จะคว้าเท่านั้นabs15? แยก / ป๊อปผลงานที่ดีกว่าสำหรับความยาวแตกต่างกัน ...
ไบรอันแรมซีย์

66

คุณสามารถใช้เมธอด 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เป็นวิธีที่พารามิเตอร์ที่สอง (ไม่จำเป็น) ได้รับการปฏิบัติ ในsubstrคือจำนวนอักขระจากดัชนี (พารามิเตอร์แรก) ในsubstringมันเป็นดัชนีของการแบ่งตัวละครที่ควรจะจบ


1
คุณมี susbstr พิมพ์ผิดควรเป็น substr
George

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

หากคุณต้องการตัวละครตัวสุดท้ายหรือตัวละครใด ๆ ที่รู้ตำแหน่งคุณสามารถเพียงแค่สตริง trat เป็นอาร์เรย์! - สตริงสามารถวนซ้ำได้ใน javascript -

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

แต่ถ้าคุณต้องการตัวละครมากกว่าหนึ่งตัวก็ให้ใช้การต่อกันอย่างมีประสิทธิภาพ

x.slice(-5);      //world

เกี่ยวกับตัวอย่างของคุณ

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

ในการแยก 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 เป็นองค์ประกอบอินพุต

ฉันได้แนบไฟล์ที่ยื่นด้วย

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

และเมื่อคลิกปุ่มนั้นฉันต้องการแยก 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"

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.