如何理解正则表达式'\ b'?

Ana*_*nan 7 javascript regex string

我正在学习正则表达式.但我无法理解'\ b',匹配单词边界.有三种情况,像这样:

  1. 在字符串中的第一个字符之前,如果第一个字符是单词字符.
  2. 在字符串中的最后一个字符之后,如果最后一个字符是单词字符.
  3. 在字符串中的两个字符之间,其中一个是单词字符,另一个不是单词字符.

我无法理解第三种情况.例如:

var reg = /end\bend/g;
var string = 'wenkend,end,end,endend';
alert( reg.test(string) ) ; //false
Run Code Online (Sandbox Code Playgroud)

'\ b'的一侧需要'\ w'字符,另一侧不需要'\ w'字符.字符串'end,end'应该匹配规则,在第一个字符是字符串','之后,在最后一个字符是字符串','之前,为什么结果是错误.请你帮忙,在此先感谢!

============分界线=============

在你的帮助下,我明白了.'end,end'匹配第一个'end'并且有一个边界,但是下一个字符是','而不是'e',所以'/ end\bend'是假的.

换句话说,reg'/ end\bend/g'或其他类似的reg不会永远退出.再次感谢

Max*_*kyi 6

\b场比赛的位置,而不是字符.所以这个正则表达式/end\bend/g说必须有字符串end.然后它应该不是一个单词字符,,它匹配,但正则表达式引擎不会在字符串中移动,它保持在,.所以正则表达式中的下一个字符是e,e但不匹配,.所以regexp失败了.这是一步一步发生的事情:

-----------------
/end\bend/g,   "end,end"        (match)
   |              |
-----------------

/end\bend/g,   "end,end"        (both regex and string position moved - match)
     |             |
------------------

/end\bend/g,   "end,end"        (the previous match was zero-length, so only regex position moved - not match)
      |            |
Run Code Online (Sandbox Code Playgroud)