2010-12-27 21 views

Odpowiedz

61

Słowo granica (\b) jest zerowa szerokość mecz, który może się równać:

  • między znakiem słowa (\w) oraz o charakterze non-word (\W) lub
  • między znakiem słownym a początek lub koniec ciągu.

w JavaScript definicja \w jest [A-Za-z0-9_] i \W jest coś innego.

zanegowana wersja \b, napisany \B, jest zerowa szerokość mecz gdzie powyższe nie robi chwyt. Dlatego może pasować:

  • Pomiędzy dwoma znakami słownymi.
  • Pomiędzy dwoma nie-słownymi znakami.
  • Pomiędzy znakiem nie będącym słowem a początkiem lub końcem ciągu.
  • Pusty ciąg.

Na przykład jeśli ciąg jest "Hello, world!" następnie \b mecze w następujących miejscach:

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

I \B mecze tych miejscach, gdzie \b nie pasuje:

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

Niezły. Z mojego doświadczenia wynika, że ​​* tłumaczenie * granic słów jest znacznie trudniejsze niż * używanie * ich. –

+2

Nie widziałem wcześniej tak wyraźnego wyjaśnienia granic słów. Świetny! – Salil

2

Podstawowym celem z non-word-boundary ma utworzyć wyrażenie regularne, które mówi:

  • jeśli jesteśmy na początku/końcu word char (\w = [a-zA-Z0-9_]) upewnij się, że poprzedni/następny znak jest również word char,

    np "a\B." ~ "a\w":

    "ab", "a4" , "a_", ... ale nie "a ", "a."

  • jeśli jesteśmy na początku/końcu non-word char (\W = [^a-zA-Z0-9_]) upewnij się, że poprzedni/następny znak jest również non-word char,

    np .: "-\B." ~ "-\W":

    "-.", "- ", "--" ...ale nie "-a", "-1"

Dla word-boundary jest podobny, ale zamiast upewniając się, że sąsiadujące ze sobą znaków są tej samej klasy (word char/non-word car) oni muszą się różnić, stąd nazwa word's boundary.