与字边界相比,正则表达式(\ B)中的非字边界是什么?

时间:2010-12-27 20:25:31

标签: javascript regex word-boundary boundary word-boundaries

与字边界相比,正则表达式(\ B)中的非字边界是什么?

2 个答案:

答案 0 :(得分:71)

单词边界(\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 !
  ^ ^ ^ ^   ^   ^ ^ ^ ^   ^

答案 1 :(得分:3)

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