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

示例:我有一个字符串

var str = "mystring#";

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

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

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


当前回答

@chakrit的公认答案是一个坚实的方法来做自己。但是,如果您正在寻找一个打包的解决方案,我建议您考虑一下underscore。字符串,正如@mlunoe指出的那样。使用下划线。字符串,代码将是:

function endsWithHash(str) {
  return _.str.endsWith(str, '#');
}

其他回答

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

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

我不知道你怎么想,但是:

var s = "mystring#";
s.length >= 1 && s[s.length - 1] == '#'; // will do the thing!

为什么是正则表达式?为什么要破坏原型?字符串的子串吗?来吧……

return this.lastIndexOf(str) + str.length == this.length;

在原始字符串长度小于搜索字符串长度并且没有找到搜索字符串的情况下不工作:

lastIndexOf返回-1,然后添加搜索字符串的长度,剩下的是原始字符串的长度。

一个可能的解决方案是

return this.length >= str.length && this.lastIndexOf(str) + str.length == this.length

如果你不想使用lasIndexOf或substr,那么为什么不只是看看字符串在它的自然状态(即。一个数组)

String.prototype.endsWith = function(suffix) {
    if (this[this.length - 1] == suffix) return true;
    return false;
}

或者作为一个独立的函数

function strEndsWith(str,suffix) {
    if (str[str.length - 1] == suffix) return true;
    return false;
}

对于coffeescript

String::endsWith = (suffix) ->
  -1 != @indexOf suffix, @length - suffix.length