正则表达式 - / \ w \ b \ w /

时间:2013-12-24 02:08:55

标签: javascript regex

我对/ \ w \ b \ w /感到困惑。我认为它应该匹配“我们”中的“e w”,因为:

\ w是单词字符“e”

\ b是单词broundary,即“”(空格)

\ w是另一个单词“w”

所以这场比赛在“我们”中是“e w”。 但...

  

/ \ w \ b \ w /将永远不会匹配任何内容,因为单词字符永远不会   后面跟着一个非单词和一个单词字符。

我从MDN得到了这个:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions?redirectlocale=en-US&redirectslug=JavaScript%2FGuide%2FRegular_Expressions

我无法理解他们的解释。你能帮我解决一下婴儿步骤吗?谢谢!

  • 尼克

5 个答案:

答案 0 :(得分:5)

空格字符不是单词边界。单词边界不是字符本身,它是“在字符之间”的位置,其中单词字符转换为非单词字符。

所以"e w".match(/\w\b/)只匹配"e",而不是"e "

/\w\b\w/永远不会匹配任何东西,因为它需要一个单词字符后面紧跟一个非单词字符和一个单词字符,这当然是不可能的。

答案 1 :(得分:2)

关键是\b含义。 \b匹配单词边界。单词边界匹配单词字符未被跟随或前面有另一个单词字符的位置。请注意,匹配中不包括匹配的字边界。换句话说,匹配的字边界的长度为零。

因此\b本身与任何内容都不匹配,它只是^$等条件。就像/^\w/意味着从单词字符开始一样,/\w\b/表示单词字符后面没有单词字符。

"e w" /\w\b/中,"e"仅匹配"e ",其中字母字符后面没有单词字符的是空格,而不是/\w\W/

"e ""e w"中的\b匹配。 /\w\b\w/只是条件与任何内容都不匹配。

$HANDBRAKE_CLI -i "$FILE" -o "$FILE.$DEST_EXT" $PRESET 意思是一个单词字符,后面跟着一个非单词,一个单词字符是矛盾的,所以永远不会匹配任何东西。

答案 2 :(得分:1)

\w\b\w表示匹配:

  1. 字母数字字符(\w);
  2. 从字母数字字符到非字母数字字符的转换(反之亦然)('\ b')。但不是任何实际的人物;
  3. 字母数字字符(\w)。
  4. 关键是\b不消耗任何字符,它会检查哪些字符与测试位置相邻。所以\w\b\w只匹配两个字符,两者都必须是字母数字(\w),它们之间的虚点必须在一侧有一个字母数字而在另一侧必须有非字母数字,因此无法匹配

    希望这有帮助。

答案 3 :(得分:1)

输入"we we"的正则表达式会失败,因为大多数方言中的单词边界是\w和非单词字符(\W)之间的位置,或者在开头如果字符串以单词字符开头或结尾,则为字符串结尾。

你的正则表达式是这样做的:

\w            word characters (a-z, A-Z, 0-9, _)
 \b           the boundary between a word char (\w) and not a word char
\w            word characters (a-z, A-Z, 0-9, _)

因此,它的说法是在你的单词边界位置后面找一个单词字符。如果您要删除结尾\w,则它会与您输入中的e相匹配。

console.log("we we".match(/\w\b/));
// => [ 'e', index: 1, input: 'we we' ]

答案 4 :(得分:-1)

使用\w\s\w来满足您的需求。请注意,\s\d不同