正则expression式中\ b和\ B之间的区别

我正在读正则expression式的书,我遇到了这个例子\b

猫把食物洒满房间。

使用正则expression式 – \bcat\b将匹配单词cat但不是scatteredcat

对于\B ,作者使用以下示例:

请input九位数的ID

出现在您的颜色编码的密钥。

使用正则expression式\B-\B匹配-单词之间的color - coded 。 另一方面使用\b-\b匹配nine-digitpass-key

在第一个例子中,我们使用\b分隔cat并在第二个使用\B分离- ? 在第二个例子中使用\b与之前的做法相反。

请向我解释不同之处。

编辑:另外,任何人都可以请解释一个新的例子?

混淆源于你的思维\b匹配空格(可能是因为“b”表示“空白”)。

\b匹配单词开头或结尾的空string。 \B匹配不在单词的开头或结尾的空string。 这里的关键是“ – ”不是一个单词的一部分。 所以<left>-<right>匹配\b-\b因为在-两边都有单词边界。 另一方面,对于<left> - <right> (注意空格),在短划线的两边都没有单词边界。 字边界是一个更进一步左右的空间。

另一方面,当search\bcat\b单词边界的行为更直观,并且与预期的“猫”匹配。

\b是一个零宽度的字边界。 特别:

匹配单词字符(任何与\ w匹配的任何内容)和非单词字符(任何与[^ \ w]或\ W匹配的任何字符)之间的位置以及string的开始和/或结尾之间的位置和/或string中的最后一个字符是单词字符。

例如: .\b匹配abc中的c

\B是一个零宽度的非字边界。 特别:

匹配两个单词字符之间的位置(即\ w \ w之间的位置)以及两个非单词字符(即\ W \ W)之间的位置。

例如: \B.\Babc匹配b

请参阅regular-expressions.info了解更多伟大的正则expression式信息

用一个不同的例子:

考虑这是要search的string和模式是'猫':

text = "catmania thiscat thiscatmaina";

现在定义,

'\ b'查找/匹配每个单词开头或结尾的模式。

'\ B'在每个单词的开头或结尾找不到/匹配模式。

不同的案例:

案例1:在每个单词的开头

result = text.replace(/\bcat/g, "ct");

现在,结果是“ctmania thiscat thiscatmaina”

案例2:在每个单词的末尾

result = text.replace(/cat\b/g, "ct");

现在,结果是“catmania thisct thiscatmaina”

情况3:不在开始

result = text.replace(/\Bcat/g, "ct");

现在,结果是“猫眼这thisctmaina”

案例4:还没到最后

result = text.replace(/cat\B/g, "ct");

现在,结果是“ctmania thiscat thisctmaina”

案例5:无论是开始还是结束

result = text.replace(/\Bcat\B/g, "ct");

现在,结果是“catmania thiscat thisctmaina”

希望这可以帮助 :)

元字符\ b是一个像插入符号和美元符号的锚。 它匹配一个被称为“文字边界”的位置。 这场比赛是零长度。

有三种不同的立场可以作为单词的边界:

  • 在string中的第一个字符之前,如果第一个字符是单词字符。
  • 在string中的最后一个字符之后,如果最后一个字符是一个单词字符。
  • string中的两个字符之间,其中一个是单词字符,另一个不是单词字符。

\ B是\ b的否定版本 。 \ B匹配\ b没有的每个位置。 有效地,\ B匹配两个单词字符之间的任何位置以及两个非单词字符之间的任何位置。

来源: http : //www.regular-expressions.info/wordboundaries.html

\b匹配一个单词边界。 \B匹配非字边界,相当于[^\b] (?!\b) (感谢@Alan Moore的更正!) 。 两者都是零宽度。

有关详细信息,请参阅http://www.regular-expressions.info/wordboundaries.html 。 该网站是非常有用的许多基本的正则expression式问题。

让我们拿一个string:

XIX IXI XX XI II IIXX XXII II XX -X X- XI IX -X- -IX -XI IX- XI- X -X -X-

注意:在这种情况下,下划线(_)不被视为特殊字符。

  1. /\bX\b/g应以特殊字符或空格开头和结尾

XIX IXI XX X I IIXXX XXII II X -X -XX -XI- X -X -X -X -XI -X -X -X -X -X-


  1. /\bX/g应该以特殊字符或白色空格开始

X IX IXI X X X I II IIXX XII II X -X -X -X -I I -X -X -I -X -X -I I -X -X -I- X -X -X-


  1. /X\b/g应以特殊字符或空格结束

XI X I X X X I II II X X XXII II X -X -X X -X I -X -X -I -X -X -I I -X -X -I- XX X-


  1. /\BX\B/g
    不应该开始, 不要以特殊字符或白色空格结束

XIX I X I XX XI II II X X X X II II XX -X X- XI IX -X- -IX -XI IX-XI- X -X -X-


  1. /\BX/g不应该以特殊字符或空格开头

XI X I X I X X XI II II XX X X II II XX -X X- XI IX -X- -IX -XI IX- XI-X_ X _ X


  1. /X\B/g不应以特殊字符或空格结束

X IX I X I X X XI II II X X XX II II XX -X X- XI IX -X- -IX -XI IX-XI- X -X -X-


  1. /\bX\B/g应该开始, 而不是以特殊字符或空格结束

X IX IXI X X XI II II X X XII II XX -X X- XI IX -X- -IX -XI IX-XI- X -X -X-


  1. /\BX\b/g不应该开始,并应以特殊字符或空格结束

XI X IXI X X XI II II X X XXII II XX -X X- XI IX -X- -IX -XI IX-XI-X_ X _X –

\B 不是 \b例如否定 \b

pass-key这里没有任何词边界-所以它匹配\B在你的第一个例子中有猫旁边的词边界,所以它匹配\b

类似的规则也适用于其他人。 \W\w \UPPER CASE负值\UPPER CASE\LOWER CASE负值