Граница слова \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
, потому что:
- В начале строки совпадает первая проверка
\b
. - Далее слово
Hello
совпадает. - Далее проверка
\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
означает латинскую букву (или цифру или знак подчёркивания), поэтому проверка не будет работать для других символов, например, кириллицы или иероглифов).