2010-12-27 40 views

Trả lời

61

Một ranh giới từ (\b) là một trận đấu chiều rộng không mà có thể phù hợp:

  • giữa một nhân vật từ (\w) và một nhân vật phi-word (\W) hoặc
  • giữa một nhân vật từ và bắt đầu hoặc kết thúc chuỗi.

Trong Javascript, định nghĩa của \w[A-Za-z0-9_]\W là bất kỳ thứ gì khác.

Phiên bản phủ định của \b, được viết \B, là một đối sánh chiều rộng bằng không nơi trên không không giữ. Do đó, nó có thể khớp:

  • Giữa hai ký tự từ.
  • Giữa hai ký tự không phải từ.
  • Giữa ký tự không phải từ và bắt đầu hoặc kết thúc chuỗi.
  • Chuỗi trống.

Ví dụ, nếu chuỗi là "Hello, world!" sau đó \b trận đấu ở các vị trí sau:

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

\B phù hợp với những nơi \b không phù hợp:

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

Đẹp nhất. Theo kinh nghiệm của tôi, * giải thích * ranh giới từ là khó khăn hơn đáng kể so với * sử dụng * chúng. –

+2

Tôi chưa thấy một giải thích rõ ràng về ranh giới từ trước đây. Tuyệt vời! – Salil

2

Mục đích cơ bản của non-word-boundary là tạo một regex có nội dung:

  • nếu chúng ta đang ở đầu/kết thúc của một word char (\w = [a-zA-Z0-9_]) chắc chắn rằng các nhân vật trước/sau cũng là một word char,

    ví dụ: "a\B." ~ "a\w":

    "ab", "a4" , "a_", ... nhưng không phải là "a ", "a."

  • nếu chúng ta đang ở đầu/cuối của non-word char (\W = [^a-zA-Z0-9_]) chắc chắn rằng các nhân vật trước/sau cũng là một non-word char,

    ví dụ .: "-\B." ~ "-\W":

    "-.", "- ", "--" ...nhưng không "-a", "-1"

Đối word-boundary nó tương tự nhưng thay vì đảm bảo rằng các nhân vật liền kề của cùng lớp (word char/non-word car) họ cần phải khác nhau, vì thế mà tên word's boundary.

Các vấn đề liên quan