Ranh giới không có từ trong regex (\ B), so với ranh giới từ là gì?Ranh giới không phải từ trong regex ( B), so với ranh giới từ là gì?
Trả lời
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
là [A-Za-z0-9_]
và \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 !
^ ^^ ^
Và \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 !
^^^^ ^^^^^ ^
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ộtword 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ộtnon-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
.
Đẹ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. –
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