заканчивается в JavaScript - PullRequest
       104

заканчивается в JavaScript

1066 голосов
/ 11 ноября 2008

Как я могу проверить, заканчивается ли строка определенным символом в JavaScript?

Пример: у меня есть строка

var str = "mystring#";

Я хочу знать, заканчивается ли эта строка #. Как я могу это проверить?

  1. Есть ли в JavaScript метод endsWith()?

  2. Одно из решений, которое у меня есть, это взять длину строки и получить последний символ и проверить его.

Это лучший способ или есть какой-то другой способ?

Ответы [ 31 ]

1 голос
/ 22 июня 2012
String.prototype.endWith = function (a) {
    var isExp = a.constructor.name === "RegExp",
    val = this;
    if (isExp === false) {
        a = escape(a);
        val = escape(val);
    } else
        a = a.toString().replace(/(^\/)|(\/$)/g, "");
    return eval("/" + a + "$/.test(val)");
}

// example
var str = "Hello";
alert(str.endWith("lo"));
alert(str.endWith(/l(o|a)/));
1 голос
/ 02 мая 2011

, если вы не хотите использовать 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;
}
1 голос
/ 20 июня 2018

Это реализация заканчивается с: String.prototype.endsWith = function (str) { return this.length >= str.length && this.substr(this.length - str.length) == str; }

1 голос
/ 28 февраля 2016

После всех этих долгих подсчетов ответов я нашел этот кусок кода простым и легким для понимания!

function end(str, target) {
  return str.substr(-target.length) == target;
}
1 голос
/ 20 июня 2018

Это реализация заканчивается с:

String.prototype.endsWith = function (str) { вернуть this.length> = str.length && this.substr (this.length - str.length) == str; }

0 голосов
/ 11 июля 2013
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
        ;
    };
}

Преимущества:

  • Эта версия не просто повторно использует indexOf.
  • Наибольшая производительность на длинных струнах. Вот тест скорости http://jsperf.com/starts-ends-with/4
  • Полностью совместим со спецификацией ecmascript. Проходит испытания
0 голосов
/ 17 февраля 2016

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;
}
0 голосов
/ 11 ноября 2008

все они очень полезные примеры. Добавление String.prototype.endsWith = function(str) поможет нам просто вызвать метод, чтобы проверить, заканчивается ли наша строка этим или нет, ну и регулярное выражение также сделает это.

Я нашел лучшее решение, чем мое. Спасибо всем.

0 голосов
/ 15 июня 2013

Это основано на принятом ответе @ charkit, разрешающем либо массив строк, либо строку, передаваемую в качестве аргумента.

if (typeof String.prototype.endsWith === 'undefined') {
    String.prototype.endsWith = function(suffix) {
        if (typeof suffix === 'String') {
            return this.indexOf(suffix, this.length - suffix.length) !== -1;
        }else if(suffix instanceof Array){
            return _.find(suffix, function(value){
                console.log(value, (this.indexOf(value, this.length - value.length) !== -1));
                return this.indexOf(value, this.length - value.length) !== -1;
            }, this);
        }
    };
}

Это требует подчеркивания - но, вероятно, его можно настроить, чтобы удалить зависимость от подчеркивания.

0 голосов
/ 05 января 2014

Не используйте регулярные выражения. Они медленные даже на быстрых языках. Просто напишите функцию, которая проверяет конец строки. В этой библиотеке есть хорошие примеры: groundjs / util.js . Будьте осторожны, добавляя функцию в String.prototype. Этот код имеет хорошие примеры того, как это сделать: groundjs / prototype.js В общем, это хорошая библиотека уровня языка: groundjs Вы также можете взглянуть на lodash

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...