який найпростіший спосіб з’ясувати, чи рядок закінчується певним значенням?
який найпростіший спосіб з’ясувати, чи рядок закінчується певним значенням?
Відповіді:
Ви можете використовувати регулярні вирази, наприклад:
str.match(/value$/)
що поверне true, якщо рядок має 'value' в кінці ($).
Викрадено з prototypejs:
String.prototype.endsWith = function(pattern) {
var d = this.length - pattern.length;
return d >= 0 && this.lastIndexOf(pattern) === d;
};
'slaughter'.endsWith('laughter');
// -> true
Мені не пощастило з підходом до матчу, але це спрацювало:
Якщо у вас є рядок, "Це мій рядок". і хотів побачити, чи закінчується крапка, зробіть так:
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;
}
Ви можете зробити 'hello world'.slice(-5)==='world'. Працює у всіх браузерах. Набагато швидше, ніж регулярний вираз.
ES6 підтримує це безпосередньо:
'this is dog'.endsWith('dog') //true
Я просто розширюю те, що розмістив @ 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
Ви завжди можете створити прототип класу String, це буде працювати:
String.prototype.endsWith = function (str) {return (this.match (str + "$") == str)}
Інші пов’язані розширення для класу String можна знайти за адресою http://www.tek-tips.com/faqs.cfm?fid=6620
matchповертає масив. Це повинно було б бути this.match(str+"$")[0]===str(і це може не вдатися, якщо matchнічого не знайде - насправді не перевірило це)