endsWith in JavaScript

前端 未结 30 960
-上瘾入骨i
-上瘾入骨i 2020-11-22 05:41

How can I check if a string ends with a particular character in JavaScript?

Example: I have a string

var str = \"mystring#\";

I wa

相关标签:
30条回答
  • 2020-11-22 06:11

    This is the implementation of endsWith:

    String.prototype.endsWith = function (str) {
      return (this.length >= str.length) && (this.substr(this.length - str.length) === str);
    }
    
    0 讨论(0)
  • 2020-11-22 06:12
    if( ("mystring#").substr(-1,1) == '#' )
    

    -- Or --

    if( ("mystring#").match(/#$/) )
    
    0 讨论(0)
  • 2020-11-22 06:12
    String.prototype.endsWith = function(str) 
    {return (this.match(str+"$")==str)}
    
    String.prototype.startsWith = function(str) 
    {return (this.match("^"+str)==str)}
    

    I hope this helps

    var myStr = “  Earth is a beautiful planet  ”;
    var myStr2 = myStr.trim();  
    //==“Earth is a beautiful planet”;
    
    if (myStr2.startsWith(“Earth”)) // returns TRUE
    
    if (myStr2.endsWith(“planet”)) // returns TRUE
    
    if (myStr.startsWith(“Earth”)) 
    // returns FALSE due to the leading spaces…
    
    if (myStr.endsWith(“planet”)) 
    // returns FALSE due to trailing spaces…
    

    the traditional way

    function strStartsWith(str, prefix) {
        return str.indexOf(prefix) === 0;
    }
    
    function strEndsWith(str, suffix) {
        return str.match(suffix+"$")==suffix;
    }
    
    0 讨论(0)
  • A way to future proof and/or prevent overwriting of existing prototype would be test check to see if it has already been added to the String prototype. Here's my take on the non-regex highly rated version.

    if (typeof String.endsWith !== 'function') {
        String.prototype.endsWith = function (suffix) {
            return this.indexOf(suffix, this.length - suffix.length) !== -1;
        };
    }
    
    0 讨论(0)
  • 2020-11-22 06:13
    if(typeof String.prototype.endsWith !== "function") {
        /**
         * String.prototype.endsWith
         * Check if given string locate at the end of current string
         * @param {string} substring substring to locate in the current string.
         * @param {number=} position end the endsWith check at that position
         * @return {boolean}
         *
         * @edition ECMA-262 6th Edition, 15.5.4.23
         */
        String.prototype.endsWith = function(substring, position) {
            substring = String(substring);
    
            var subLen = substring.length | 0;
    
            if( !subLen )return true;//Empty string
    
            var strLen = this.length;
    
            if( position === void 0 )position = strLen;
            else position = position | 0;
    
            if( position < 1 )return false;
    
            var fromIndex = (strLen < position ? strLen : position) - subLen;
    
            return (fromIndex >= 0 || subLen === -fromIndex)
                && (
                    position === 0
                    // if position not at the and of the string, we can optimise search substring
                    //  by checking first symbol of substring exists in search position in current string
                    || this.charCodeAt(fromIndex) === substring.charCodeAt(0)//fast false
                )
                && this.indexOf(substring, fromIndex) === fromIndex
            ;
        };
    }
    

    Benefits:

    • This version is not just re-using indexOf.
    • Greatest performance on long strings. Here is a speed test http://jsperf.com/starts-ends-with/4
    • Fully compatible with ecmascript specification. It passes the tests
    0 讨论(0)
  • 2020-11-22 06:15

    This version avoids creating a substring, and doesn't use regular expressions (some regex answers here will work; others are broken):

    String.prototype.endsWith = function(str)
    {
        var lastIndex = this.lastIndexOf(str);
        return (lastIndex !== -1) && (lastIndex + str.length === this.length);
    }
    

    If performance is important to you, it would be worth testing whether lastIndexOf is actually faster than creating a substring or not. (It may well depend on the JS engine you're using...) It may well be faster in the matching case, and when the string is small - but when the string is huge it needs to look back through the whole thing even though we don't really care :(

    For checking a single character, finding the length and then using charAt is probably the best way.

    0 讨论(0)
提交回复
热议问题