Javascript正则表达式引擎:非单词字符的字符串边界在字符串开头不匹配

时间:2018-10-04 21:25:25

标签: javascript regex word-boundary

我认为\b在单词和非单词字符之间的过渡处或字符串的开头或结尾处都匹配。所以这应该是真的:

'#abc'.match(/\b#/)

但是它为空,至少在Firefox和Chrome中是这样。知道为什么吗?

2 个答案:

答案 0 :(得分:4)

\b等效于(^\w|\w$|\W\w|\w\W)。您可能已经从the mozilla documentation阅读了以下内容:

  

单词边界与单词字符后跟非单词字符之间,或非单词字符后跟单词字符之间或字符串开头或字符串结尾之间的位置匹配。

它的书写方式不正确。当与单词字符相邻时,应指定它匹配字符串的开头或结尾。这就是在尝试解释漂亮的算法时写长句子而不是使用要点的问题:很难阅读,因此很难校对。


来自a source other than mozilla的正确定义示例:

  

有三个不同的位置可以作为单词边界:

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

答案 1 :(得分:0)

'#'不是 Word 字符,因此在字符串开头没有Word边界要匹配。就这么简单。

如果您删除“ #”,那么它就是'abc',那么“ \b”将正确匹配Word boundary