为什么以下文件扩展名正则表达式不匹配?

时间:2016-12-06 10:46:47

标签: javascript regex

这是代码:

isValid = field.uploads.forEach(upload => {
  console.log(upload.file)
  console.log('ext:', _.getFileExt(upload.file.name))
  console.log('reg:', regex)
  console.log('res:', regex.test(_.getFileExt(upload.file.name)))
})

这些是日志:

ext: jpg
reg: /^.*\.(.jpg)$/i
res: false

如您所见,即使文件是jpg,正则表达式也会返回false。这是为什么?

修改

以下是效用函数:

_.listToRegex = (array) => {
  return new RegExp('^.*\\.(' + array.join('|') + ')$', 'i')
}

_.getFileExt = (string) => {
  return string.split('.').pop()
}

1 个答案:

答案 0 :(得分:2)

据我所知,你有两个问题。首先,您的正则表达式有错误。其次,您必须确定要创建的正则表达式是否与文件名文件扩展名匹配。

1。如上面的评论中所述,记录到控制台的正则表达式包含一个额外的句点。如果您只打算使用表达式来测试有效性,/^.*\.(.jpg)$/i可以压缩到/\.(jpg)$/i。您似乎没有显示正则表达式变量的赋值,因此很难判断出错误的确切程度,但我最好的猜测是您调用了listToRegex实用程序,如:

var regex = _.listToRegex(['.jpg'])

字符串.中的'.jpg'会导致引入额外的期间。您可以用以下代码替换该代码:

var regex = _.listToRegex(['jpg'])

2. 其次,当我想要根据文件名对其进行测试时,您似乎正在针对文件扩展名测试正则表达式。

regex.test(upload.file.name) //=> true