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

  1. 昨天升级webpack,升级后编译一直存在问题,最终定位原因为正则表达式写错导致。但是原因有点蹊跷。

  2. 正则表示式如下

    var reg=/abc|/
    reg.test('ddd')

    结果:
    true

  3. https://img.mukewang.com/5c875a2f0001baef01680075.jpg

  4. 网上搜了下,没搜到解释。 在idea里试了下,| 也是匹配所有. 求知道原因的同学不吝赐教,最好给出文档!!!


aluckdog
浏览 593回答 3
3回答

12345678_0001

看了各位答主的回答,我整理了一种解释如下:每一个正则表达式的限定即包含了位置限定也包含了字符限定。只有既满足位置约束也满足字符约束的字符串才会评估为true.比如,^cat 位置限定为行开头,字符限定为catcat 位置限定为任意位置, 字符限定为cat所以/abc|/的解释就是匹配任意位置开始的abc串或者匹配任意位置.因为任何字符串即使是空串也是有位置信息(开头,结尾都算位置信息)的,所以自然任何字符串都可以匹配上了。不知道这个解释,大家觉得如何?

阿晨1998

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

qq_笑_17

|表示或,因此/abc|/,表示匹配abc或任意单个或多个字符。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript