协慌网

登录 贡献 社区

endsWith 在 JavaScript 中

如何检查字符串是否以 JavaScript 中的特定字符结尾?

示例:我有一个字符串

var str = "mystring#";

我想知道该字符串是否以#结尾。我怎么检查呢?

  1. JavaScript 中有endsWith()方法吗?

  2. 我有一个解决方案是获取字符串的长度并获取最后一个字符并检查它。

这是最好的方式还是有其他方式?

答案

更新(2015 年 11 月 24 日):

这个答案最初发布于 2010 年(六年前)。所以请注意这些富有洞察力的评论:


原始答案:

我知道这是一年前的问题... 但我也需要这个,我需要它跨浏览器工作所以... 结合每个人的答案和评论并简化它:

String.prototype.endsWith = function(suffix) {
    return this.indexOf(suffix, this.length - suffix.length) !== -1;
};
  • 不创建子字符串
  • 使用本机indexOf函数可获得最快的结果
  • 使用indexOf的第二个参数跳过不必要的比较以跳过
  • 适用于 Internet Explorer
  • 没有正则表达式的并发症

此外,如果您不喜欢在本机数据结构的原型中填充东西,这里是一个独立版本:

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)
  1. 不幸的是。
  2. if( "mystring#".substr(-1) === "#" ) {}