/\Bon/
匹配“的”中“可能昨天”“中午”,并/ye\B/
匹配“你们”,在 。为什么会发生?
这是正确的和预期的行为:
console.log("at noon".match(/\Bon/)[0]);
console.log("possibly yesterday".match(/ye\B/)[0]);
不像字符类,如\w
,匹配单个"word" character,或\s
匹配一个空格字符其中,\B
是anchor point它不匹配一个字符,而是声称该锚点位于特定的位置。在\B
的情况下,它声称该锚不在字边界。
词边界要么是一个地方,一个"word character"旁边的字符串的空格字符或开头或结尾。
所以,/\Bon/
实际上意味着找到一个“上”,是不是在一个单词的开始。这就是为什么“在上”上的“on”匹配的原因;但类似的“上”,“在一个”不:
console.log("at one".match(/\Bon/));
以同样的方式,/ye\B/
实际上意味着找到一个“叶”,是不是在一个单词的结尾。所以,“你们”,在“可能你们 sterday”相匹配,因为它不是在单词的末尾,而“叶”在“可能再见”不结尾:
console.log("possibly goodbye".match(/ye\B/));
还应该补充的是,\B
不应该与\b
混淆,它们有不同的含义。 \b
匹配词边界处的锚点。所以,如果你想找到那个“对”与开头的单词,你可以使用/\bon/
:
console.log("one at noon".match(/\bon/)); // finds the "on" in one, but not the "on" in noon
同样可以使用在单词的末尾找到的东西:
console.log("goodbye yesterday".match(/ye\b/)); // finds the "ye" in goodbye, but not the "ye" in yesterday
怎么做之前的事情“上”即O和事情经过“上”即没有。是同一个词的一部分? –
@AnkurMarwaha我不确定你在问什么,但是试图为你解决问题,在这个例子中有两个词,“at”和“noon”。 “on”是“中午”一词的一部分。单词边界在第一个“n”之前和最后一个“n”之后。非单词边界将介于第一个“n”和第一个“o”之间,介于“o”和下一个“o”之间,然后介于最后一个“n”之间。 '/ \ Bon /'匹配2“o”和“on”之间的非单词边界。 '\ B'是一个零宽度的锚点,意思是说,匹配时,没有任何东西被添加到返回的匹配字符串中。 –