【发布时间】:2011-08-17 22:40:39
【问题描述】:
我有
var id="ctl03_Tabs1";
使用 JavaScript,我如何获取最后五个字符或最后一个字符?
【问题讨论】:
-
要获取最后一个字符,最好的选择是 id.charAt(id.length-1)
-
读者注意:请务必阅读第一个答案,尤其是来自@Terence 的答案。
标签: javascript
我有
var id="ctl03_Tabs1";
使用 JavaScript,我如何获取最后五个字符或最后一个字符?
【问题讨论】:
标签: javascript
编辑:正如其他人指出的那样,使用 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"
这会将字符串拆分为下划线的数组,然后从数组中“弹出”最后一个元素(这是您想要的字符串)。
【讨论】:
.split().pop() 对性能有很大影响。如果这是您在循环中使用的东西并且性能很关键,那么您需要牢记这一点。
.split().pop() 仍然是每秒 500 万次操作。在出现性能问题之前,这不是性能问题。 ;)
slice 在这一点上是一个更好的选择。
filename.split(".").pop() 比使用负值 3 切片要聪明得多。很多这些答案都提到使用负值,但是当Tabs12 出现并且你得到abs12 时会发生什么。这里发布的.split("_").pop() 解决方案再次比任何人说应该使用切片的人聪明得多
不要使用.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
【讨论】:
slice() 参考:developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
_Tabs15 怎么办? slice(-5) 只会抓住 abs15 吗?对于不同的长度,split/pop 的效果要好得多...
您可以使用带有负起始位置的substr() method 来检索最后n 个字符。例如,这获取最后 5 个:
var lastFiveChars = id.substr(-5);
【讨论】:
获取最后一个字符很容易,因为您可以将字符串视为数组:
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 中,它是字符切片结束位置的索引。
【讨论】:
以下脚本显示了使用 JavaScript 获取字符串中最后 5 个字符和最后 1 个字符的结果:
var testword='ctl03_Tabs1';
var last5=testword.substr(-5); //Get 5 characters
var last1=testword.substr(-1); //Get 1 character
输出:
Tabs1 // 有 5 个字符
1 // 得到 1 个字符
【讨论】:
一种方法是使用slice,如下所示:
var id="ctl03_Tabs1";
var temp=id.slice(-5);
所以temp 的值将是"Tabs1"。
【讨论】:
【讨论】:
const r = '6176958e92d42422203a3c58';
r.slice(-4)
结果'3c58'
r.slice(-1)
结果'8'
【讨论】:
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"
【讨论】:
无需使用substr 方法来获取字符串的单个字符!
以 Jamon Holmgren 为例,我们可以更改 substr 方法并简单地指定数组位置:
var id = "ctl03_Tabs1";
var lastChar = id[id.length - 1]; // => "1"
【讨论】:
今天 2020.12.31 我在 Chrome v87、Safari v13.1.2 和 Firefox v84 上对 MacOs HighSierra 10.13.6 进行测试,以获取最后 N 个字符大小写的选定解决方案(最后一个字母大小写结果,为清楚起见,我在 separate answer )。
适用于所有浏览器
slice 的解决方案 D 很快或最快我执行 2 个测试用例:
下面 sn-p 给出了解决方案 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)
)})
This shippet only presents functions used in performance tests - it not perform tests itself!
以下是 chrome 的示例结果
【讨论】:
如果您只想要最后一个字符或已知位置的任何字符,您可以简单地将字符串作为数组! - 字符串在 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];
这将返回 id,如果在 'rating_element' 之后没有 id,则返回 undefined :)
【讨论】:
var id="ctl03_Tabs1";
var res = id.charAt(id.length-1);
我发现了这个问题,并通过一些研究发现这是获取最后一个字符的最简单方法。
正如其他人提到并添加的完整性以获得最后 5 个:
var last5 = id.substr(-5);
【讨论】:
今天 2020.12.31 我在 Chrome v87、Safari v13.1.2 和 Firefox v84 上对 MacOs HighSierra 10.13.6 执行测试,以获取用于获取最后一个字符大小写的选定解决方案(最后 N 个字母大小写结果,为清楚起见,我在 separate answer )。
适用于所有浏览器
我执行 2 个测试用例:
下面 sn-p 给出了解决方案 A B C D E F G(我的),H(我的)
//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')
)})
This shippet only presents functions used in performance tests - it not perform tests itself!
以下是 chrome 的示例结果
【讨论】:
您可以利用string.length 功能获取最后一个字符。请看下面的例子:
let str = "hello";
console.log(str[str.length-1]);
// Output : 'o' i.e. Last character.
同样,您可以使用for 循环使用上述代码来反转字符串。
【讨论】:
【讨论】:
假设您将子字符串与另一个字符串的结尾进行比较并将结果用作布尔值,您可以扩展 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
【讨论】:
endsWith method 的代码...开玩笑,这就是startsWith 方法。但它表明,在对内置对象定义自己的方法之前,您应该始终测试现有方法。并且可能完全远离内置方法,例如 lodash 和 underscore。
要获取字符串的最后一个字符,可以使用split('').pop() 函数。
const myText = "The last character is J";
const lastCharater = myText.split('').pop();
console.log(lastCharater); // J
这是有效的,因为当split('') 函数有empty('') 作为参数时,字符串的每个字符都会被更改为数组的一个元素。因此,我们可以使用pop() 函数返回该数组的最后一个元素,即'J' 字符。
【讨论】:
我实际上有以下问题,这是我如何通过上述答案解决的,但是从输入元素中提取 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
});
【讨论】:
如果逗号是字符串中的最后一个字符,这个将删除逗号..
var str = $("#ControlId").val();
if(str.substring(str.length-1)==',') {
var stringWithoutLastComma = str.substring(0,str.length-1);
}
【讨论】:
最后 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 获得倒数第五个。
我相信这会奏效....
var string1="myfile.pdf"
var esxtenion=string1.substr(string1.length-4)
extension 的值将是 ".pdf"
【讨论】:
这里有 2 个示例将始终显示最后一个字符
var id="ctl03_Tabs1";
console.log(id.charAt(id.length - 1));
console.log(id[id.length - 1]);
【讨论】: