【发布时间】:2016-10-28 05:38:47
【问题描述】:
我正在学习正则表达式。但我无法理解 '\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\b,\bend/g -
\b不匹配字符,它匹配字符之间的一个点,一个边界。当\b旁边的两个字符都是单词字符时,那里不可能有单词边界。您可能想到的正则表达式是/end\Wend/g -
@Anan:逗号不是边界。逗号前后有边界,但逗号本身不是边界。
-
@Anan 对,
/end\bend/不能匹配任何东西,因为它会匹配endend,但是中间的de之间没有单词边界,所以匹配失败。
标签: javascript regex string