14 декабря 2021 г.

Граница слова: \b

Граница слова \b – проверка, как ^ и $.

Когда движок регулярных выражений (программный модуль, реализующий поиск по регулярным выражениям) видит \b, он проверяет, что позиция в строке является границей слова.

Есть три вида позиций, которые являются границами слова:

  • Начало текста, если его первый символ \w.
  • Позиция внутри текста, если слева находится \w, а справа – не \w, или наоборот.
  • Конец текста, если его последний символ \w.

Например, регулярное выражение \bJava\b будет найдено в строке Hello, Java!, где Java – отдельное слово, но не будет найдено в строке Hello, JavaScript!.

alert( "Hello, Java!".match(/\bJava\b/) ); // Java
alert( "Hello, JavaScript!".match(/\bJava\b/) ); // null

В строке Hello, Java! следующие позиции соответствуют \b:

Так что она соответствует регулярному выражению \bHello\b, потому что:

  1. В начале строки совпадает первая проверка \b.
  2. Далее слово Hello совпадает.
  3. Далее проверка \b – снова совпадает, так как мы находимся между o и запятой.

Шаблон \bJava\b также совпадёт. Но не \bHell\b (потому что после l нет границы слова), и не Java!\b (восклицательный знак не является «символом слова» \w, поэтому после него нет границы слова).

alert( "Hello, Java!".match(/\bHello\b/) ); // Hello
alert( "Hello, Java!".match(/\bJava\b/) );  // Java
alert( "Hello, Java!".match(/\bHell\b/) );  // null (нет совпадения)
alert( "Hello, Java!".match(/\bJava!\b/) ); // null (нет совпадения)

Мы можем использовать \b не только со словами, но и с цифрами.

Например, регулярное выражение \b\d\d\b ищет отдельно стоящие двузначные числа. Другими словами, оно требует, чтобы и до и после \d\d были символы, отличные от \w, такие как пробелы или пунктуация (или начало/конец текста).

alert( "1 23 456 78".match(/\b\d\d\b/g) ); // 23,78
alert( "12,34,56".match(/\b\d\d\b/g) ); // 12,34,56
Граница слова \b не работает для алфавитов, не основанных на латинице

Проверка \b смотрит на обе стороны границы: должно быть \w с одной стороны и «не \w» – с другой.

Но \w означает латинскую букву (или цифру или знак подчёркивания), поэтому проверка не будет работать для других символов, например, кириллицы или иероглифов).

Задачи

Время имеет формат: часы:минуты. И часы, и минуты имеют две цифры, например, 09:00.

Введите регулярное выражение, чтобы найти время в строке: Завтрак в 09:00 в комнате 123:456.

P.S. В этой задаче пока нет необходимости проверять правильность времени, поэтому 25:99 также может быть верным результатом.

P.P.S. Регулярное выражение не должно находить 123:456.

Ответ: \b\d\d:\d\d\b.

alert( "Завтрак в 09:00 в комнате 123:456.".match( /\b\d\d:\d\d\b/ ) ); // 09:00
Карта учебника