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

示例:我有一个字符串

var str = "mystring#";

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

在JavaScript中有endsWith()方法吗? 我有一个解决方案,取字符串的长度,并得到最后一个字符,并检查它。

这是最好的办法还是还有别的办法?


当前回答

不要使用正则表达式。即使在语速快的语言中,它们也很慢。只需编写一个检查字符串结尾的函数。这个库有很好的例子:groundjs/util.js。 在String.prototype中添加函数时要小心。这段代码有如何做到这一点的很好的例子:groundjs/prototype.js 总的来说,这是一个很好的语言级库:groundjs 你也可以看看lodash

其他回答

没有看到接近切片法。所以我就把它留在这里:

function endsWith(str, suffix) {
    return str.slice(-suffix.length) === suffix
}

7岁的帖子,但我不能理解前几篇帖子,因为它们很复杂。所以,我写了自己的解决方案:

function strEndsWith(str, endwith)
{
    var lastIndex = url.lastIndexOf(endsWith);
    var result = false;
    if (lastIndex > 0 && (lastIndex + "registerc".length) == url.length)
    {
        result = true;
    }
    return result;
}
/#$/.test(str)

将在所有浏览器上工作,不需要猴子修补字符串,也不需要扫描整个字符串,因为lastIndexOf做的时候没有匹配。

如果你想匹配一个常量字符串,它可能包含正则表达式的特殊字符,比如'$',那么你可以使用以下方法:

function makeSuffixRegExp(suffix, caseInsensitive) {
  return new RegExp(
      String(suffix).replace(/[$%()*+.?\[\\\]{|}]/g, "\\$&") + "$",
      caseInsensitive ? "i" : "");
}

然后你可以这样使用它

makeSuffixRegExp("a[complicated]*suffix*").test(str)

一种未来证明和/或防止覆盖现有原型的方法是测试检查它是否已经添加到String原型中。以下是我对非正则表达式高评级版本的看法。

if (typeof String.endsWith !== 'function') {
    String.prototype.endsWith = function (suffix) {
        return this.indexOf(suffix, this.length - suffix.length) !== -1;
    };
}

不要使用正则表达式。即使在语速快的语言中,它们也很慢。只需编写一个检查字符串结尾的函数。这个库有很好的例子:groundjs/util.js。 在String.prototype中添加函数时要小心。这段代码有如何做到这一点的很好的例子:groundjs/prototype.js 总的来说,这是一个很好的语言级库:groundjs 你也可以看看lodash