Как я могу проверить, заканчивается ли строка определенным символом в JavaScript?
Пример: у меня есть строка
var str = "mystring#";
Я хочу знать, заканчивается ли эта строка #
. Как я могу это проверить?
Есть ли
endsWith()
метод в JavaScript?Одно из решений, которое у меня есть, - взять длину строки, получить последний символ и проверить его.
Это лучший способ или есть другой способ?
javascript
string
ends-with
Бобби Кумар
источник
источник
String.prototype.endsWith
.Ответы:
ОБНОВЛЕНИЕ (24 ноября 2015 г.):
Этот ответ первоначально был опубликован в 2010 году (шесть лет назад), поэтому, пожалуйста, примите к сведению эти проницательные комментарии:
Shauna - обновление для Googlers. Похоже, ECMA6 добавляет эту функцию. Статья MDN также показывает polyfill. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith
TJ Crowder - Создание подстрок не дорого в современных браузерах; возможно, это было в 2010 году, когда был опубликован этот ответ. В наши дни простой
this.substr(-suffix.length) === suffix
подход является самым быстрым в Chrome, таким же в IE11, как indexOf, и только на 4% медленнее (территория fergetaboutit) в Firefox: jsperf.com/endswith-stackoverflow/14 И быстрее по всем направлениям, когда результат ложен: jsperf.com/endswith-stackoverflow-when-false Конечно, с ES6 добавление заканчивается, суть спорная. :-)ОРИГИНАЛЬНЫЙ ОТВЕТ:
Я знаю, что это годичный вопрос ... но мне это тоже нужно, и мне нужно, чтобы он работал кросс-браузерно, так что ... объединяя ответы и комментарии каждого и немного упрощая его:
indexOf
функцию для самых быстрых результатовindexOf
чтобы пропустить впередТакже, если вам не нравится вставлять вещи в прототипы нативной структуры данных, вот отдельная версия:
РЕДАКТИРОВАТЬ: Как отметил @hamish в комментариях, если вы хотите ошибиться на всякий случай и проверить, была ли уже реализована реализация, вы можете просто добавить
typeof
проверку следующим образом:источник
this.substr(-suffix.length) === suffix
подход является самым быстрым в Chrome, таким же в IE11indexOf
и только на 4% медленнее (территория fergetaboutit) в Firefox: jsperf.com/endswith-stackoverflow/14 И быстрее по всем направлениям, когда результат ложен: jsperf .com / EndsWith-StackOverflow-когда-ложь конечно, с ES6 добавленияendsWith
, точка является спорным. :-)будет работать во всех браузерах, не требует внесения исправлений обезьяны
String
и не требует сканирования всей строки, какlastIndexOf
при отсутствии совпадений.Если вы хотите сопоставить константную строку, которая может содержать специальные символы регулярного выражения, такие как
'$'
, то вы можете использовать следующее:и тогда вы можете использовать это так
источник
lastIndexOf
сканирует всю строку, только если не находит совпадений или находит совпадение в начале. Если в конце есть совпадение, оно работает пропорционально длине суффикса. Да,/asdf$/.test(str)
дает истину, когдаstr
заканчивается"asdf"
.if( "mystring#".substr(-1) === "#" ) {}
источник
slice()
? Это работает для меня в моем быстром тесте IE7.Да ладно, это правильная
endsWith
реализация:Использование
lastIndexOf
только создает ненужные циклы ЦП, если нет совпадения.источник
===
хотя.Эта версия избегает создания подстроки и не использует регулярные выражения (некоторые ответы регулярных выражений здесь будут работать, другие не работают):
Если для вас важна производительность, стоит проверить,
lastIndexOf
действительно ли это быстрее, чем создание подстроки или нет. (Это может зависеть от того, какой движок JS вы используете ...) Он может быть быстрее в подходящем случае, и когда строка мала, но когда строка огромна, ей нужно оглянуться через все это, даже если хотя нам все равно :(Для проверки одного символа,
charAt
вероятно, лучше всего найти длину, а затем использовать ее.источник
str+"$"
в качестве регулярного выражения, не работают, так как они могут быть недопустимыми регулярными выражениями.Не видел apporach с
slice
методом. Так что я просто оставлю это здесь:источник
не работает в случае, когда длина исходной строки на единицу меньше длины строки поиска и строка поиска не найдена:
lastIndexOf возвращает -1, затем вы добавляете длину строки поиска, и у вас остается длина исходной строки.
Возможное исправление
источник
От developer.mozilla.org String.prototype.endsWith ()
Резюме
endsWith()
Метод определяет , является ли строка заканчивается символами другой строки, возвращая истинным или ложным в зависимости от обстоятельств.Синтаксис
параметры
searchString : символы для поиска в конце этой строки.
position : Искать в этой строке, как если бы эта строка была только этой длинной; по умолчанию - фактическая длина этой строки, ограниченная в диапазоне, установленном длиной этой строки.
Описание
Этот метод позволяет определить, заканчивается ли строка другой строкой.
Примеры
Характеристики
Спецификация языка ECMAScript, 6-е издание (ECMA-262)
Совместимость браузера
источник
-- Или --
источник
надеюсь, это поможет
традиционный способ
источник
Я не знаю о вас, но:
Почему регулярные выражения? Зачем возиться с прототипом? SubStr? Да ладно...
источник
Еще одна быстрая альтернатива, которая сработала для меня как очарование с использованием регулярных выражений:
источник
Если вы используете lodash :
Если вы не используете lodash, вы можете позаимствовать у его источника .
источник
Я только что узнал об этой библиотеке строк:
http://stringjs.com/
Включите файл js, а затем используйте
S
переменную следующим образом:Его также можно использовать в NodeJS, установив его:
Затем требуя его в качестве
S
переменной:На веб-странице также есть ссылки на библиотеки альтернативных строк, если вам не по вкусу.
источник
источник
Так много вещей для такой маленькой проблемы, просто используйте это регулярное выражение
источник
Прошло много лет на этот вопрос. Позвольте мне добавить важное обновление для пользователей, которые хотят использовать ответ наиболее часто встречающегося чакрита.
Функции'ndsWith 'уже добавлены в JavaScript как часть ECMAScript 6 (экспериментальная технология)
См. Здесь: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith
Следовательно, настоятельно рекомендуется добавить проверку на наличие нативной реализации, как указано в ответе.
источник
источник
Путь к будущему доказательству и / или предотвращению перезаписи существующего прототипа будет проверочной проверкой, чтобы увидеть, был ли он уже добавлен в прототип String. Вот мой взгляд на версию без регулярных выражений.
источник
if (!String.prototype.hasOwnProperty("endsWith"))
это лучший способ. С помощьюtypeof
«MooTools и некоторых других библиотек AJAX вас обидят», согласно «Crockford on JavaScript - Уровень 7: ECMAScript 5: Новые части», в 15:50 мин.Принятый ответ @ chakrit - это надежный способ сделать это самостоятельно. Однако, если вы ищете пакетное решение, я рекомендую взглянуть на underscore.string , как указывал @mlunoe. Используя underscore.string, код будет:
источник
если вы не хотите использовать lasIndexOf или substr, то почему бы просто не посмотреть на строку в ее естественном состоянии (т.е. массив)
или как отдельная функция
источник
источник
После всех этих долгих подсчетов ответов я нашел этот кусок кода простым и легким для понимания!
источник
Это реализация конца с:
String.prototype.endsWith = function (str) { return this.length >= str.length && this.substr(this.length - str.length) == str; }
источник
Это реализация
endsWith
:источник
Это основывается на принятом ответе @ charkit, позволяющем передавать либо массив строк, либо строку в качестве аргумента.
Это требует подчеркивания - но, вероятно, может быть скорректирована, чтобы удалить зависимость подчеркивания.
источник
_.str.endsWith
Льготы:
источник
Не используйте регулярные выражения. Они медленные даже на быстрых языках. Просто напишите функцию, которая проверяет конец строки. Эта библиотека имеет хорошие примеры: groundjs / util.js . Будьте осторожны, добавляя функцию в String.prototype. Этот код имеет хорошие примеры того, как это сделать: groundjs / prototype.js В общем, это хорошая библиотека уровня языка: groundjs. Вы также можете взглянуть на lodash.
источник
Все они очень полезные примеры. Добавление
String.prototype.endsWith = function(str)
поможет нам просто вызвать метод, чтобы проверить, заканчивается ли наша строка этим или нет, ну и регулярное выражение также сделает это.Я нашел лучшее решение, чем мое. Спасибо всем.
источник
Для кофе
источник