Вопрос по jquery, javascript – Строка JavaScript или jQuery заканчивается служебной функцией

73

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

Смотрите также второй ответ на этот вопрос:stackoverflow.com/questions/280634/endswith-in-javascript Baldrick

Ваш Ответ

8   ответов
38

Похищен у прототипов:

String.prototype.endsWith = function(pattern) {
    var d = this.length - pattern.length;
    return d >= 0 && this.lastIndexOf(pattern) === d;
};

'slaughter'.endsWith('laughter');
// -> true
Некоторые люди считают, что модификация прототипа базового класса - это то, что вы не должны делать - Крокфорд называет это «глобальным сокращением». в своей книге «JavaScript: хорошие части».
Почему бы тебе не сделать это? Или вы просто не делаете этого, потому что это сказал Крокфорд?
Если кто-то не хочет изменять строку, он может очень легко превратить ее в автономную функцию.
Вы не должны делать это, поскольку это не гарантирует работу во всех реализациях JS: спецификация ECMAScript Compact Profile (ECMA-327:ecma-international.org/publications/standards/Ecma-327.htm) указывает, что "Компакт" реализации (например, на портативных устройствах, таких как телефоны) не должны его поддерживать (см. раздел 5.2). Даже если вас это не беспокоит, вполне возможно, что оно сломает более новые версии JS: например, любой, у кого в прошлом был развернут код, добавляющий «forEach». Метод Array.prototype теперь ломает нативную реализацию в последних версиях Firefox.
9

Регулярные выражения

"Hello world".match(/world$/)
5

'hello world'.slice(-5)==='world', Работает во всех браузерах. Гораздо быстрее, чем регулярное выражение.

0

String.prototype.endsWith = function (str) {return (this.match (str + & quot; $ & quot;) == str)}

Вы можете найти другие связанные расширения для класса String вhttp://www.tek-tips.com/faqs.cfm?fid=6620

Это также не удается, потому чтоmatch возвращает массив. Это должно бытьthis.match(str+"$")[0]===str (и это может потерпеть неудачу, еслиmatch ничего не находит - на самом деле это не было ложной проверкой).
Это не удастся, если str содержит специальные символы регулярного выражения, например & quot; [ssss] & quot ;.
2

'this is dog'.endsWith('dog')  //true
Да, но для этого у вас есть бабел.
Это будет полезно, когда никто больше не использует IE11 или ниже.
5

Если у вас есть строка, & quot; Это моя строка. & Quot; и хотел посмотреть, заканчивается ли он точкой, сделайте так:

var myString = "This is my string.";
var stringCheck = ".";
var foundIt = (myString.lastIndexOf(stringCheck) === myString.length - stringCheck.length) > 0;
alert(foundIt);

Вы можете изменить переменную stringCheck на любую строку для проверки. Еще лучше было бы добавить это в вашу собственную функцию следующим образом:

function DoesStringEndWith(myString, stringCheck)
{
    var foundIt = (myString.lastIndexOf(stringCheck) === myString.length - stringCheck.length) > 0;
    return foundIt;
}
Очень мило, @theJerm. Это работало для меня в разных ситуациях, тогда как .match не всегда.
1

что написал @ luca-matteis, но для решения проблем, указанных в комментариях, код должен быть упакован, чтобы убедиться, что вы не переписываете нативную реализацию.

if ( !String.prototype.endsWith ) {  
    String.prototype.endsWith = function(pattern) {
        var d = this.length - pattern.length;
        return d >= 0 && this.lastIndexOf(pattern) === d;
    };
}

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

150

str.match(/value$/)

который вернул бы true, если строка имеет «значение»; в конце этого ($).

RegEx Search () вместо Match () будет лучшим вариантом, если мы просто хотим получить логический результат. Search () вернет -1, если не найден. if (str.search (/ value $ /)! = -1)developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
match () не возвращает логическое значение. «foobar» .match (/ bar $ /) возвращает [«quot; bar» »]
Обычно я сначала не вынимаю инструмент регулярных выражений из моей сумки, но это превосходит все альтернативы (String # endWith изначально поддерживается только в Firefox, а расширение / использование js сторонних разработчиков немного избыточно)
Неудачный тест: значение = & quot; тест [a-z] & quot ;. В противном случае: «test [a-z]» .match (/ [a-z] $ /) возвращает «null»;

Похожие вопросы