Что такое граница без слов в регулярном выражении (\ B) по сравнению с границей слов? - PullRequest
24 голосов
/ 27 декабря 2010

Что такое граница без слов в регулярном выражении (\ B) по сравнению с границей слов?

Ответы [ 2 ]

72 голосов
/ 27 декабря 2010

Граница слова (\b) - это совпадение нулевой ширины, которое может соответствовать:

  • Между символом слова (\w) и несловесным символом (\W) или
  • Между символом слова и началом или концом строки.

В Javascript определение \w равно [A-Za-z0-9_], а \W - это что-то еще.

Отрицательная версия \b, написанная \B, представляет собой совпадение с нулевой шириной, где вышеприведенное * не выполняется.Следовательно, он может соответствовать:

  • Между двумя символами слова.
  • Между двумя символами без слова.
  • Между символом без слова и началом или концомстрока.
  • Пустая строка.

Например, если строка "Hello, world!", то \b соответствует в следующих местах:

 H e l l o ,   w o r l d !
^         ^   ^         ^ 

И \B соответствует тем местам, где \b не соответствует:

 H e l l o ,   w o r l d !
  ^ ^ ^ ^   ^   ^ ^ ^ ^   ^
3 голосов
/ 02 июня 2015

Основная цель non-word-boundary - создать регулярное выражение, которое говорит:

  • , если мы находимся в начале / конце word char (\w = [a-zA-Z0-9_]) убедитесь, что предыдущий / следующий символ также является word char,

    , например: "a\B." ~ "a\w":

    "ab", "a4", "a_",... но не "a ", "a."

  • , если мы находимся в начале / конце non-word char (\W = [^a-zA-Z0-9_]), убедитесь, что предыдущий/ следующий символ также non-word char,

    , например: "-\B." ~ "-\W":

    "-.", "- ", "--", ... но не "-a", "-1"

Для word-boundary это похоже, но вместо того, чтобы убедиться, что соседние символы принадлежат к одному и тому же классу (word char / non-word car), им нужноотличаются, отсюда и название word's boundary.

...