endsWith在JavaScript中
如何检查一个字符串是否以JavaScript中的特定字符结尾?
例如:我有一个字符串
var str = "mystring#";
我想知道该字符串是否以#
结尾。 我如何检查它?
JavaScript中是否有endsWith()
方法?
我有一个解决方案是取出字符串的长度并获取最后一个字符并检查它。
这是最好的方式还是有其他方式?
更新(2015年11月24日):
这个答案最初发布于2010年(前六年),因此请注意以下这些富有洞察力的评论:
Shauna - Google员工更新 - 看起来像ECMA6增加了这个功能。 MDN文章还显示了一个polyfill。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith
TJ Crowder - 在现代浏览器上创建子串并不昂贵; 这个答案发布的时候可能会在2010年。 目前,简单的this.substr(-suffix.length) === suffix
方法在Chrome上是最快的,在IE11上与indexOf相同,而在Firefox上只有4%的速度(比较大):jsperf.com/endswith-ackackoverflow / 14当结果为false时,全线更快:jsperf.com/endswith-stackoverflow-when-false 当然,使用ES6添加endsWith,这一点是没有意义的。 :-)
原文答案:
我知道这是一个古老的问题......但我也需要它,我需要它跨浏览器......所以, 结合每个人的回答和评论并简化一下:
String.prototype.endsWith = function(suffix) {
return this.indexOf(suffix, this.length - suffix.length) !== -1;
};
indexOf
函数获得最快的结果 indexOf
的第二个参数跳过不必要的比较以跳过 另外,如果你不喜欢用本地数据结构的原型填充东西,那么这是一个独立的版本:
function endsWith(str, suffix) {
return str.indexOf(suffix, str.length - suffix.length) !== -1;
}
编辑:正如评论中的@hamish所指出的,如果你想在安全方面犯错并检查是否已经提供了一个实现,那么你可以添加一个typeof
检查,如下所示:
if (typeof String.prototype.endsWith !== 'function') {
String.prototype.endsWith = function(suffix) {
return this.indexOf(suffix, this.length - suffix.length) !== -1;
};
}
/#$/.test(str)
将在所有浏览器上工作,不需要Monkey修补String
,也不需要像lastIndexOf
那样在不匹配时扫描整个字符串。
如果要匹配可能包含正则表达式特殊字符(如'$'
的常量字符串,则可以使用以下内容:
function makeSuffixRegExp(suffix, caseInsensitive) {
return new RegExp(
String(suffix).replace(/[$%()*+.?[]{|}]/g, "$&") + "$",
caseInsensitive ? "i" : "");
}
然后你可以像这样使用它
makeSuffixRegExp("a[complicated]*suffix*").test(str)
if( "mystring#".substr(-1) === "#" ) {}