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

标签 javascript regex string

我正在学习正则表达式。但是我无法理解 '\b' 匹配单词边界。有如下三种情况:

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

第三种情况看不懂例如:

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

'\b' 需要在其一侧有一个 '\w' 字符,而在另一侧则不需要 '\w' 字符。字符串 'end,end' 应该匹配规则,在第一个字符之后是字符串 ',' ,在最后一个字符之前是字符串 ',' ,所以为什么结果是错误的。你能帮忙吗,提前谢谢!

============分割线=============

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

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

最佳答案

\b 匹配位置,而不是字符。所以这个正则表达式 /end\bend/g 表示必须有字符串 end。那么它后面应该跟一个非单词字符,即,,它匹配,但正则表达式引擎不会在字符串中移动,它停留在,。因此,正则表达式中的下一个字符是 e,而 e, 不匹配。所以正则表达式失败了。这是一步一步发生的事情:

-----------------
/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)
      |            |

关于javascript - 如何理解正则表达式 '\b' ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40298708/

相关文章:

javascript - 使用jcanvas绘制图层: performance optimization

regex - 美国银行机构帐号正则表达式?

python - 将用户输入与列表 'A' 进行比较,并根据列表 'B' 的索引将输入的字符转换为列表 'A'

Java - 根据字符串和新行拆分字符串

javascript - C# 中的作用域、变量访问

javascript - 无法使 jQuery 动态选择器工作

javascript - 如何在鼠标滚轮上进行水平滚动?

mysql - 高级 MySQL 模式匹配(超越 LIKE...%)

c# - 使用 C#,如何关闭格式错误的 XML 标记?

php - 将 xml 字符串逐字转储到 mysql 数据库