Я читаю книгу по регулярным выражениям и наткнулся на этот пример для \b
:
Кот разбросал свою еду по комнате.
Использование регулярного выражения - \bcat\b
будет соответствовать слову, cat
но не cat
in scattered
.
Для \B
автора используется следующий пример:
Пожалуйста, введите девятизначный идентификатор, поскольку он
появляется на вашем цветном коде доступа.
Использование регулярных выражений для \B-\B
совпадений -
между словом color - coded
. Использование, \b-\b
с другой стороны, соответствует -
in nine-digit
и pass-key
.
Почему в первом примере мы используем \b
для разделения, cat
а во втором - \B
для разделения -
? Использование \b
во втором примере делает противоположное тому, что было раньше.
Пожалуйста, объясните мне разницу.
РЕДАКТИРОВАТЬ: Кроме того, может ли кто-нибудь объяснить новый пример?
-
это не считается частью слова. Точно так же!
не является частью слова. Так что снова\b!\b
соответствует «uunet! Iamold», но не «Wow! You are». Вы можете попробовать это на regexpal.com .\B matches the empty string not at the beginning or end of a word
\b
граница слова нулевой ширины. В частности:Пример:
.\b
совпаденияc
вabc
\B
- это несловая граница нулевой ширины. В частности:Пример:
\B.\B
совпаденияb
вabc
См. Regular-expressions.info для получения дополнительной информации о регулярных выражениях
источник
string.match()
возвращает только первое совпадение, если вы не добавите глобальный флагg
:"abc def".match(/\b./g)
returns['a', ' ', 'd']
Другой пример:
Учтите, что это строка, а образец, который нужно искать, - это cat:
text = "catmania thiscat thiscatmaina";
Теперь определения,
'\ b' находит / соответствует шаблону в начале или в конце каждого слова.
'\ B' не находит / не соответствует шаблону в начале или в конце каждого слова.
Различные случаи:
Случай 1: В начале каждого слова
result = text.replace(/\bcat/g, "ct");
Теперь результат "ctmania thiscat thiscatmaina"
Случай 2: В конце каждого слова
result = text.replace(/cat\b/g, "ct");
Теперь результат "catmania thisct thiscatmaina"
Случай 3: Не в начале
result = text.replace(/\Bcat/g, "ct");
Теперь результат - "catmania thisct thisctmaina"
Случай 4: Не в конце
result = text.replace(/cat\B/g, "ct");
Теперь результат "ctmania thiscat thisctmaina"
Случай 5: Ни начала, ни конца
result = text.replace(/\Bcat\B/g, "ct");
Теперь результат - "catmania thiscat thisctmaina"
Надеюсь это поможет :)
источник
Метасимвол \ b - это якорь, такой же как каретка и знак доллара. Он соответствует позиции, называемой «границей слова». Это совпадение нулевой длины.
Существуют три различных положения, которые квалифицируются как границы слов:
\ B - это отрицательная версия \ b . \ B соответствует в каждой позиции, где \ b нет. Фактически, \ B соответствует любой позиции между двумя символами слова, а также любой позиции между двумя символами, не являющимися словами.
Источник: http://www.regular-expressions.info/wordboundaries.html
источник
\b
совпадает с границей слова.\B
совпадает с границами слов и эквивалентно (спасибо @Alan Moore за исправление!) . Оба имеют нулевую ширину.[^\b]
(?!\b)
Подробнее см. Http://www.regular-expressions.info/wordboundaries.html . Сайт чрезвычайно полезен для решения многих основных вопросов о регулярных выражениях.
источник
\B
это не эквивалентно[^\b]
. Класс символов ([...]
или[^...]
) потребляет ровно один символ, в то время как утверждения нулевой ширины, такие как\b
и,\B
ничего не потребляют. Если вы добавляете\b
класс символов, он принимает совершенно другое значение:[\b]
соответствует пробелу и[^\b]
соответствует любому символу, кроме пробела.\B
действительно эквивалентно(?!\b)
.Возьмем строку вида:
Примечание. Нижнее подчеркивание (_) в этом случае не считается специальным символом.
/\bX\b/g
Должен начинаться и заканчиваться специальным символом или пробелом/\bX/g
Должен начинаться со специального символа или пробела/X\b/g
Должен заканчиваться специальным символом или пробелом/\BX\B/g
Если не начать и не закончить с особым характером или белым пространством
/\BX/g
Если не начать с символом или белым пространством/X\B/g
Если не заканчивается специальным символом или белого пространства/\bX\B/g
Должен начинаться и не заканчиваться специальным символом или пробелом/\BX\b/g
Если не начать и должен заканчиваться специальным символом или белого пространстваисточник
Источник © Copyright RexEgg.com
Граница слова: \ b *
Граница слова \ b соответствует позициям, где одна сторона является символом слова (обычно буквой, цифрой или подчеркиванием - но см. Ниже варианты для разных машин), а другая сторона не является символом слова (например, это может быть начало строка или пробел).
Таким образом, регулярное выражение \ bcat \ b будет соответствовать коту в черном коте, но не будет соответствовать ему в кататоническом, коте или сертификате. Если удалить одну из границ, \ bcat будет соответствовать cat в catfish, а cat \ b будет соответствовать cat в tomcat, но не наоборот. Оба, конечно же, сами по себе соответствовали бы кошке.
Не-слово-граница: \ B
\ B соответствует всем позициям, где \ b не соответствует. Следовательно, он соответствует:
✽ Когда ни одна из сторон не является символом слова, например, в любой позиции в строке $ = (@ -% ++) (включая начало и конец строки)
✽ Когда обе стороны представляют собой символ слова, например между H и i в Hi!
Это может показаться не очень полезным, но иногда \ B - это именно то, что вам нужно. Например,
✽ \ Bcat \ B обнаружит, что кошка полностью окружена словесными символами, как в сертификате, но не сама по себе, ни в начале, ни в конце слов.
✽ cat \ B найдет кота и в сертификате, и в соме, но ни в коте, ни отдельно.
✽ \ Bcat найдет кота и в сертификате, и в коте, но ни в соме, ни отдельно.
✽ \ Bcat | cat \ B найдет cat во встроенной ситуации, например, в сертификате, соме или коте, но не самостоятельно.
источник
\ b используется как граница слова
Найдите все «кошки» в указанном выше слове
без \ b
с \ b
источник
\B
не является,\b
например, отрицательным\b
pass-key
здесь нет границы слова,-
поэтому он соответствует\B
в вашем первом примере, есть граница слова рядом с котом, поэтому он соответствует\b
аналогичные правила применяются и к другим.
\W
отрицательный из\w
\UPPER CASE
отрицательный из\LOWER CASE
источник