Как проверить наличие string.endsWith и игнорировать пробелы - PullRequest
0 голосов
/ 25 мая 2018

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

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 ]

0 голосов
/ 25 мая 2018

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

0 голосов
/ 25 мая 2018

В вашем конкретном примере ответ @ 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 его не обрежут, регулярные выражения могут помочь.Стоит почитать и еще один хороший инструмент, чтобы положить его в набор инструментов.

0 голосов
/ 25 мая 2018

Вы можете использовать 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 :
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...