关于正则优先级踩的坑【匹配图片后缀结尾】

2019-11-13 16:25:10 浏览数 (1)

前言

其实之前还真没注意到正则表达式总还有“优先级”这一说法。不过平常注意一下就可以了【踩过一次坑之后自然就会记住了~】。

采坑

一个很简单的应用:验证图片后缀是否允许。

代码语言:javascript复制
let a = '1.jpg';

console.log(/.gif|png|jpg$/i.test(a));

咋一看,好像没问题。

但是这样呢?

代码语言:javascript复制
let a = '1.pngdfadsf';

console.log(/.gif|png|jpg$/i.test(a));

还是对的?我们想要判断图片必须以要求的结尾,但是这样返回的也是正确的?

因为|的优先级太低了,所以以上正则实际意思是:

  • 匹配有.gif
  • 匹配有.png
  • 匹配有.jpg 并且是以.jpg结尾的

解决方法很简单:加括号强行提升优先级

代码语言:javascript复制
let a = '1.pngdfadsf';

console.log(/.(gif|png|jpg)$/i.test(a));

踩过坑之后应该就会注意一下了。

0 人点赞