endWith in JavaScript
如何检查字符串是否以JavaScript中的特定字符结尾?
示例:我有一个字符串
var str = "mystring#";
我想知道该字符串是否以 结尾。我该如何检查它?#
JavaScript中有方法吗?
endsWith()
我有一个解决方案是获取字符串的长度,获取最后一个字符并检查它。
这是最好的方法还是有其他方法?
如何检查字符串是否以JavaScript中的特定字符结尾?
示例:我有一个字符串
var str = "mystring#";
我想知道该字符串是否以 结尾。我该如何检查它?#
JavaScript中有方法吗?endsWith()
我有一个解决方案是获取字符串的长度,获取最后一个字符并检查它。
这是最好的方法还是有其他方法?
更新(2015年11月24日):
这个答案最初是在2010年(六年前)发布的,所以请注意这些有见地的评论:
Google 员工更新 - 看起来 ECMA6 添加了此功能。MDN文章还显示了一个polyfill。https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith
在现代浏览器上创建子字符串并不昂贵;很可能是在2010年发布这个答案的时候。如今,简单的方法在Chrome上是最快的,在IE11上与indexOf相同,在Firefox上仅慢4%(fergetaboutit领域):https://jsben.ch/OJzlM 当结果为假时,全面更快:jsperf.com/endswith-stackoverflow-when-false 当然,随着ES6添加endsWith,这一点是没有意义的。
this.substr(-suffix.length) === suffix
原答:
我知道这是一个有一年历史的问题...但我也需要这个,我需要它来跨浏览器工作,所以...结合每个人的答案和评论,并简化一下:
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)
将适用于所有浏览器,不需要猴子修补 ,并且不需要像没有匹配项时那样扫描整个字符串。String
lastIndexOf
如果要匹配可能包含正则表达式特殊字符(如 )的常量字符串,则可以使用以下方法:'$'
function makeSuffixRegExp(suffix, caseInsensitive) {
return new RegExp(
String(suffix).replace(/[$%()*+.?\[\\\]{|}]/g, "\\$&") + "$",
caseInsensitive ? "i" : "");
}
然后你可以像这样使用它
makeSuffixRegExp("a[complicated]*suffix*").test(str)