如何检查字符串是否以 JavaScript 中的特定字符结尾?
示例:我有一个字符串
var str = "mystring#";
我想知道该字符串是否以#
结尾。我怎么检查呢?
JavaScript 中有endsWith()
方法吗?
我有一个解决方案是获取字符串的长度并获取最后一个字符并检查它。
这是最好的方式还是有其他方式?
更新(2015 年 11 月 24 日):
这个答案最初发布于 2010 年(六年前)。所以请注意这些富有洞察力的评论:
Shauna - Google 员工更新 - 看起来 ECMA6 添加了此功能。 MDN 文章还显示了一种填充物。 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%慢(fergetaboutit 领域): jsperf.com/endswith-stackoverflow / 14当结果为假时,全面更快: 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)
将适用于所有浏览器,不需要猴子修补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) === "#" ) {}