如何使用JavaScript获取字符串的最后一个字符

use*_*663 684 javascript

我有

var id="ctl03_Tabs1";
Run Code Online (Sandbox Code Playgroud)

使用JavaScript,我如何获得最后五个字符或最后一个字符?

Jam*_*ren 1026

编辑:正如其他人所指出的,使用slice(-5)而不是substr.但是,请参阅.split().pop()本答案底部的解决方案以获得另一种方法.

原始答案:

您将要使用.substr()与该.length属性结合的Javascript字符串方法.

var id = "ctl03_Tabs1";
var lastFive = id.substr(id.length - 5); // => "Tabs1"
var lastChar = id.substr(id.length - 1); // => "1"
Run Code Online (Sandbox Code Playgroud)

这将获取从id.length - 5开始的字符,并且由于省略了.substr()的第二个参数,因此继续到字符串的末尾.

您也可以.slice()像其他人在下面指出的那样使用该方法.

如果您只是想在下划线后找到字符,可以使用:

var tabId = id.split("_").pop(); // => "Tabs1"
Run Code Online (Sandbox Code Playgroud)

这会将字符串拆分为下划线上的数组,然后"弹出"数组中的最后一个元素(这是您想要的字符串).

  • 在你的测试中,`.split().pop()`仍然是每秒500万次操作.在出现性能问题之前,这不是性能问题.;) (6认同)
  • 第一个解决方案可以缩短和更快,请参阅下面的答案.但是,我同意在这种特殊情况下的分裂和流行观念. (5认同)
  • @HutchMoore 你是对的。我已经编辑了我的答案,提到此时 `slice` 是一个更好的选择。 (4认同)
  • 如果你来这里是因为你想检索文件名的扩展名,那么 `filename.split(".").pop()` 比使用负值 3 进行切片要聪明得多。很多答案都提到使用负数值,但是当“Tabs12”出现并且您得到“abs12”时会发生什么。这里发布的`.split("_").pop()`解决方案再次比任何人说应该使用切片要聪明得多 (4认同)
  • [比较] .http://jsperf.com/get-last-chars与.slice(-5)和.substr(length -5),`.split()。pop()`会对性能产生很大的影响。如果这是您在循环中使用的内容,并且性能至关重要,则需要牢记这一点。 (3认同)

Ter*_*nce 777

不要用.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
Run Code Online (Sandbox Code Playgroud)

具有负值的substr()在IE中不起作用

  • 是切片接受负值,这是伟大的!`slice()`参考:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/slice (6认同)
  • 我假设切片仅在其一致时才起作用?如果结局是`_Tabs15`怎么办?slice(-5)只会抓住`abs15`?分割/弹出工作对于不同长度更好... (5认同)
  • 我更喜欢这个答案,尽管接受的答案很好. (3认同)
  • 这应该是答案,使用切片这种方式也更高效:https://jsperf.com/slice-vs-substr-and-length (3认同)

Zir*_*rak 59

获取最后一个字符很简单,因为您可以将字符串视为数组:

var lastChar = id[id.length - 1];
Run Code Online (Sandbox Code Playgroud)

要获取字符串的一部分,可以使用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
Run Code Online (Sandbox Code Playgroud)

substr和之间的区别substring是如何处理第二个(可选)参数.在substr,它是索引中的字符数(第一个参数).在substring,它是字符切片应该结束的索引.

  • 你有一个错字 susbstr 应该是 substr (2认同)

小智 50

您可以使用带有负起始位置的substr()方法来检索最后n个字符.例如,这得到了最后5:

var lastFiveChars = id.substr(-5);
Run Code Online (Sandbox Code Playgroud)

  • 最佳答案和简短答案。无需知道原始字符串长度(对于当前浏览器,因此我们排除 IE) (3认同)
  • 这是迄今为止实现结果的最佳和最短的方法 (2认同)

小智 30

const r = '6176958e92d42422203a3c58'; 
r.slice(-4)
Run Code Online (Sandbox Code Playgroud)

结果“3c58”

r.slice(-1)
Run Code Online (Sandbox Code Playgroud)

结果'8'


小智 23

以下脚本显示使用JavaScript获取字符串中最后5个字符和最后1个字符的结果:

var testword='ctl03_Tabs1';
var last5=testword.substr(-5); //Get 5 characters
var last1=testword.substr(-1); //Get 1 character
Run Code Online (Sandbox Code Playgroud)

输出:

Tabs1 //有5个字符

1 //有1个角色

  • 与IE不兼容,请参阅我的回答. (4认同)

Kei*_*van 13

一种方法是使用slice,如下所示:

var id="ctl03_Tabs1";
var temp=id.slice(-5);
Run Code Online (Sandbox Code Playgroud)

所以 的值temp将是"Tabs1"


Ada*_*son 9

Substr 函数允许您使用减号来获取最后一个字符。

var string = "hello";
var last = string.substr(-1);
Run Code Online (Sandbox Code Playgroud)

它非常灵活。例如:

// 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"
Run Code Online (Sandbox Code Playgroud)


Che*_*ers 7

检查子字符串函数.

要获得最后一个角色:

id.substring(id.length - 1, id.length);
Run Code Online (Sandbox Code Playgroud)


Nel*_*len 7

没有必要使用substr方法来获取字符串的单个字符串!

以Jamon Holmgren为例,我们可以改变substr方法并简单地指定数组位置:

var id = "ctl03_Tabs1";
var lastChar = id[id.length - 1]; // => "1"
Run Code Online (Sandbox Code Playgroud)


Kam*_*ski 6

表现

今天 2020.12.31 我在 Chrome v87、Safari v13.1.2 和 Firefox v84 上对 MacOs HighSierra 10.13.6 进行测试,以获取用于获取最后 N 个字符大小写的选择解决方案(最后一个字母大小写结果,为了清楚起见,我在单独的答案中提出)。

结果

适用于所有浏览器

  • 解决方案 D 基于slice是快速还是最快
  • 解决方案 G 最慢

在此处输入图片说明

细节

我执行 2 个测试用例:

  • 当字符串有 10 个字符时 - 你可以在这里运行它
  • 当字符串有 1M 个字符时 - 你可以在这里运行它

下面的片段展示了解决方案 A B C D E F G(我的)

//https://stackoverflow.com/questions/5873810/how-can-i-get-last-characters-of-a-string

// https://stackoverflow.com/a/30916653/860099
function A(s,n) {
  return s.substr(-n)
}

// https://stackoverflow.com/a/5873890/860099
function B(s,n) {
  return s.substr(s.length - n)
}

// https://stackoverflow.com/a/17489443/860099
function C(s,n) {
  return s.substring(s.length - n, s.length);
}

// https://stackoverflow.com/a/50395190/860099
function D(s,n) {
  return s.slice(-n);
}

// https://stackoverflow.com/a/50374396/860099
function E(s,n) {
  let i = s.length-n;
  let r = '';
  while(i<s.length) r += s.charAt(i++);
  return r
}

// https://stackoverflow.com/a/17489443/860099
function F(s,n) {
  let i = s.length-n;
  let r = '';
  while(i<s.length) r += s[i++];
  return r
}

// my
function G(s,n) {
  return s.match(new RegExp(".{"+n+"}$"));
}

// --------------------
// TEST
// --------------------

[A,B,C,D,E,F,G].map(f=> {  
  console.log(
    f.name + ' ' + f('ctl03_Tabs1',5)
  )})
Run Code Online (Sandbox Code Playgroud)
This shippet only presents functions used in performance tests - it not perform tests itself!
Run Code Online (Sandbox Code Playgroud)

以下是 chrome 的示例结果

在此处输入图片说明


t_d*_*m93 6

const id = 'ctl03_Tabs1';
id.at(-1); // Returns '1'
Run Code Online (Sandbox Code Playgroud)

at支持负整数从最后一个字符串字符开始倒数。


文档:字符串/at


Zal*_*oza 5

如果您只想要最后一个字符或已知位置的任何字符,您可以简单地将字符串作为数组!- 字符串在 javascript 中是可迭代的 -

Var x = "hello_world";
 x[0];                    //h
 x[x.length-1];   //d
Run Code Online (Sandbox Code Playgroud)

然而,如果您需要的不仅仅是一个字符,那么使用 splice 是有效的

x.slice(-5);      //world
Run Code Online (Sandbox Code Playgroud)

关于你的例子

"rating_element-<?php echo $id?>"
Run Code Online (Sandbox Code Playgroud)

要提取 id,您可以轻松使用 split + pop

Id= inputId.split('rating_element-')[1];
Run Code Online (Sandbox Code Playgroud)

这将返回 id,如果在 'rating_element' 之后没有 id,则返回 undefined :)


Kam*_*ski 5

表现

今天 2020 年 12 月 31 日,我在 Chrome v87、Safari v13.1.2 和 Firefox v84 上的 MacOs HighSierra 10.13.6 上执行测试,以选择获取最后一个字符大小写的解决方案(最后 N 个字母大小写结果,为了清楚起见,我在单独的答案中给出)。

结果

对于所有浏览器

  • 解决方案 D、E、F 相当快或最快
  • 解 G、H 最慢

在此输入图像描述

细节

我执行了 2 个测试用例:

下面的代码片段提供了解决方案 A B C D E F G (my), H (my)

//https://stackoverflow.com/questions/5873810/how-can-i-get-last-characters-of-a-string

// https://stackoverflow.com/a/30916653/860099
function A(s) {
  return s.substr(-1)
}

// https://stackoverflow.com/a/5873890/860099
function B(s) {
  return s.substr(s.length - 1)
}

// https://stackoverflow.com/a/17489443/860099
function C(s) {
  return s.substring(s.length - 1, s.length);
}

// https://stackoverflow.com/a/50395190/860099
function D(s) {
  return s.slice(-1);
}

// https://stackoverflow.com/a/50374396/860099
function E(s) {  
  return s.charAt(s.length-1);
}

// https://stackoverflow.com/a/17489443/860099
function F(s) {  
  return s[s.length-1];
}

// my
function G(s) {
  return s.match(/.$/);
}

// my
function H(s) {
  return [...s].pop();
}

// --------------------
// TEST
// --------------------

[A,B,C,D,E,F,G,H].map(f=> {  
  console.log(
    f.name + ' ' + f('ctl03_Tabs1')
  )})
Run Code Online (Sandbox Code Playgroud)
This shippet only presents functions used in performance tests - it not perform tests itself!
Run Code Online (Sandbox Code Playgroud)

这是 chrome 的示例结果

在此输入图像描述