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