Как проверить наличие string.endsWith и игнорировать пробелы

У меня есть эта рабочая функция, чтобы проверить, заканчивается ли строка :

var string = "This is the text:"

function (string) {
  if (string.endsWith(':')) {
    // ends with :
  }
  if (string.endsWith(': ')) {
   // ends with : and a space
  }
  else {
    // does not end with :
  }
}

Я также хочу проверить, заканчивается ли строка двоеточием, затем пробелом или даже двумя пробелами: :_ или же :__ (где подчеркивание представляет пробелы в этом синтаксисе).

Любые идеи о том, как реализовать это без использования нескольких операторов if или определения каждой возможной комбинации двоеточия и пробелов? Давайте предположим, что после двоеточия может быть любое количество пробелов, но если последний видимый символ - двоеточие, я хочу поймать его в своей функции.

3 ответа

Решение

Ты можешь использовать String.prototype.trimEnd удалить пробел с конца, а затем проверить, что:

function (string) {
  if (string.endsWith(':')) {
    // ends with :
  }
  else if (string.trimEnd().endsWith(':')) {
   // ends with : and white space
  }
  else {
    // does not end with :
  }
}

В вашем конкретном примере ответ @Steve будет отлично работать, потому что вы проверяете определенное условие в конце вашей строки. Однако, если вы хотите протестировать более сложные строки, вы также можете рассмотреть возможность использования регулярных выражений (также известных как RegEx). Эта документация Mozilla содержит отличное руководство по использованию регулярных выражений для JavaScript.

Чтобы создать шаблон регулярного выражения и использовать его для проверки вашей строки, вы можете сделать что-то вроде следующего:

const regex = /:\s*$/;

// All three will output 'true'
console.log(regex.test('foo:'));
console.log(regex.test('foo: '));
console.log(regex.test('foo:  '));

// All three will output 'false'
console.log(regex.test('foo'));
console.log(regex.test(':foo'));
console.log(regex.test(': foo'));

... где регулярное выражение /:\s*$/ можно интерпретировать так:

/     Start of regex pattern
 :    Match a literal colon (:)
 \s   Right afterward, match a whitespace character
   *  Match zero or more of the preceding characters (the space character)
 $    Match at the end of the string
/     End of regex pattern

Вы можете использовать Regexr.com для тестирования в реальном времени для различных шаблонов регулярных выражений, которые вы придумали, и вы можете ввести образец текста в текстовое поле, чтобы увидеть, соответствует ли ваш шаблон.

Регулярные выражения являются мощным инструментом. Есть некоторые случаи, когда вы хотите их использовать, и другие случаи, когда это излишне. Для вашего конкретного примера, просто используя простой .endsWith() является более простым и, скорее всего, предпочтительным. Если вам нужно выполнить сложное сопоставление с шаблоном, где функции JavaScript его не обрезают, регулярные выражения могут помочь. Стоит почитать об этом и другом хорошем инструменте, который можно поместить в панель инструментов.

Здравствуйте, вы можете использовать регулярные выражения / (: \ s *) /
s * будет соответствовать 0 или всем пробелам, если они существуют

Другие вопросы по тегам