为了账号安全,请及时绑定邮箱和手机立即绑定

为什么以竖线结尾的正则表达式永真?

为什么以竖线结尾的正则表达式永真?

aluckdog 2019-03-07 18:08:54
昨天升级webpack,升级后编译一直存在问题,最终定位原因为正则表达式写错导致。但是原因有点蹊跷。正则表示式如下var reg=/abc|/reg.test('ddd')结果:true网上搜了下,没搜到解释。 在idea里试了下,| 也是匹配所有. 求知道原因的同学不吝赐教,最好给出文档!!!
查看完整描述

3 回答

?
12345678_0001

TA贡献1802条经验 获得超5个赞

看了各位答主的回答,我整理了一种解释如下:

每一个正则表达式的限定即包含了位置限定也包含了字符限定。只有既满足位置约束也满足字符约束的字符串才会评估为true.

比如,

^cat 位置限定为行开头,字符限定为cat
cat 位置限定为任意位置, 字符限定为cat

所以/abc|/的解释就是匹配任意位置开始的abc串或者匹配任意位置.

因为任何字符串即使是空串也是有位置信息(开头,结尾都算位置信息)的,所以自然任何字符串都可以匹配上了。

不知道这个解释,大家觉得如何?


查看完整回答
反对 回复 2019-03-12
?
阿晨1998

TA贡献2037条经验 获得超6个赞

从测试的结果来看,如果|前面没有匹配上的话,以|结尾仅仅是匹配字符间的位置,仅仅是匹配一个位置,有 n 个字符,就有 n+1 个位置可以匹配,所以空字符串,也可以匹配到一个位置,所以永远为真:

https://img1.sycdn.imooc.com//5c875a420001daa002190227.jpg

最后在 reg101 上是这么解释的:

https://img1.sycdn.imooc.com//5c875a4400014f8404140113.jpg


查看完整回答
反对 回复 2019-03-12
?
qq_笑_17

TA贡献1818条经验 获得超7个赞

|表示,因此/abc|/,表示匹配abc任意单个或多个字符


查看完整回答
反对 回复 2019-03-12
  • 3 回答
  • 0 关注
  • 592 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信