我正在学习正则表达式。但是我无法理解 '\b' 匹配单词边界。有如下三种情况:
- 在字符串的第一个字符之前,如果第一个字符是单词字符。
- 在字符串的最后一个字符之后,如果最后一个字符是单词字符。
- 在字符串中的两个字符之间,其中一个是单词字符,另一个不是单词字符。
第三种情况看不懂例如:
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/