Javascript正则表达式在Firefox中不起作用

Javascript正则表达式在Firefox中不起作用,javascript,regex,validation,Javascript,Regex,Validation,这个正则表达式在Firefox中失败,但在IE中工作 function validate(x) { return /.(jpeg|jpg)$/ig.test(x); } 有人能解释为什么吗?在正则表达式中,“.”本身表示“任何字符”。你是说“\”是指“句点”吗?函数正在使用模式(jpeg | jpg)$来测试字符串。其目的似乎是验证文件名,以确保其扩展名为jpg或jpeg 正如James Bailey所指出的,有一个错误,即周期应该用反斜杠转义。正则表达式中的句点将匹配任何字符。因此,如

这个正则表达式在Firefox中失败,但在IE中工作

function validate(x) {
   return /.(jpeg|jpg)$/ig.test(x);
}
有人能解释为什么吗?

在正则表达式中,“.”本身表示“任何字符”。你是说“\”是指“句点”吗?

函数正在使用模式
(jpeg | jpg)$
来测试字符串。其目的似乎是验证文件名,以确保其扩展名为
jpg
jpeg


正如James Bailey所指出的,有一个错误,即周期应该用反斜杠转义。正则表达式中的句点将匹配任何字符。因此,如图所示,如果您仅使用文件名进行测试,则模式将同时匹配
imagexjpg
image.jpg

,那么为全局设置“g”标志没有多大意义,因为您仍然在字符串末尾进行匹配-我运行了以下命令:

function validate(x) {
  return /\.(jpeg|jpg)$/i.test(x);
}

var imagename = 'blah.jpg';
alert (validate(imagename));    // should be true
imagename = 'blah.jpeg';
alert (validate(imagename));    // should be true
imagename = 'blah.png';
alert (validate(imagename));    // should be false
在FF中,所有三项测试的结果与预期一致

至于“它是如何工作的”——正则表达式可能会变得相当棘手——但我将解释上述模式的细节:

  • 斜线/用于分隔图案
  • 具有“任何非空白字符”的特殊含义-将其写为强制图案仅匹配句号
  • ()表示一个集合(它变得更复杂,但涵盖了这个用法)
  • |表示“或”
  • $表示字符串的结尾(或多行文本中的行尾)
  • 第二个斜杠后的i表示“不区分大小写”
  • g的意思是“全局”——在本例中没有太多意义,因此我将其删除
所以

表示“以.jpeg或.jpg结尾的字符串-忽略大小写”


所以。JPEG、.jpg、.JPEG等。。。现在将全部通过…

请使用有效的测试用例(显示“失败”输入的测试用例)进行更新。谢谢。你能解释一下这段代码是怎么工作的吗?或者,直接从RE中读出来,它匹配一个字符串“带一个点,后跟'jpeg'或'jpg',所有这些都在末尾,忽略了大小写“谢谢你,伙计,我刚刚删除了g,在前面加了正斜杠”。。这段代码很有用。
g
的意思是“全局的”,而不是“贪婪的”根据ECMAScript语言规范第15.10.4.1节。然而,这里可能不需要它,所以移除它将是一个很好的计划。我认为它们的意思是相同的,不是吗?我是从PHP和Perl进入RegEx的,所以我倾向于默认他们的术语…ack-morning coffee开始了,我意识到我在模糊地思考。。。全球化和贪婪根本不是一回事global=字符串中的所有匹配-greedy=在单个模式中尽可能多地匹配
/\.(jpeg|jpg)$/i