找不到与正则表达式模式匹配的字符串

Unable to find a string matching a regex pattern

本文关键字:字符串 模式匹配 正则表达式 找不到      更新时间:2023-09-26

在尝试提交表单时,javascript正则表达式验证对于字符串总是错误的。

Regex:-^(([a-zA-Z]:)|(''''{2}''w+)''$?)(''''(''w[''w].*))+(.jpeg|.JPEG|.jpg|.JPG)$

我已经尝试过跟随字符串反对它

abc.jpg,
abc:.jpg,
a:.jpg,
a:asdas.jpg,

哪个字符串可能与此正则表达式匹配

由于字符串中间有$?,因此此regex不会与任何内容匹配
显然,在结束字符串符号$上使用可选修饰符?是不正确的(如果粘贴https://regex101.com/它确实会给你一个错误)。如果javascript解析器忽略错误并保持regex原样,这仍然意味着您将在应该继续的字符串中间匹配一个结束字符串
未经修饰,它本应与'$(美元符号)匹配,但由于它被写出来了,它不起作用。

如果你想让你的字符串被接受,你可以使用Firebug或类似的开发工具,在javascript代码中编辑字符串(假设没有服务器端检查,也假设没有错误)。如果忽略$?,则匹配字符串将为''''w''''ww.jpg(但由于.是未标注的,即使''''w''''ww%jpg也是匹配的)

当然,我写这个答案是假设逃跑确实是你在问题中表现出来的。如果你需要为正确转义的^(([a-zA-Z]:)|(''{2}'w+)'$?)(''('w['w].*))+('.jpeg|'.JPEG|'.jpg|'.JPG)$找到匹配的模式,那么你可以使用这个工具来找到http://fent.github.io/randexp.js/(尽管它会找到奇怪的匹配)。一种匹配模式是c:'zz.jpg

如果您只是在寻找一个正则表达式来匹配您所获得的内容,请继续测试它:

('w+:?'w*'.[jpe?gJPE?G]+,)

这应该与你想要的完全匹配。当然,如果你喜欢的话,可以去掉末尾的逗号。

如果删除转义级别,则实际正则表达式为

^(([a-zA-Z]:)|(''{2}'w+)'$?)(''('w['w].*))+(.jpeg|.JPEG|.jpg|.JPG)$

^之后,启动第一个管道(([a-zA-Z]:)|(''{2}'w+)'$?),该管道匹配一个字母,后跟一个冒号或两个反斜杠,后跟一或多个单词字符,后跟可选文字$。里面用了一些不必要的括号。

第二部分(''('w['w].*))+匹配一个反斜杠,后面跟着两个单词字符'w['w],这看起来很奇怪,因为它相当于'w'w(第二个'w不需要字符类)。后面跟着任意数量的任意字符。这整件事一次或多次。

(.jpeg|.JPEG|.jpg|.JPG)的最后一部分中,人们可能忘记了对匹配文字的点进行转义。应使用'.。该部分可以简化为'.(JPE?G|jpe?g)

它会匹配类似的东西

A: '' 12任何东西.JPEG

''''1$''anything.jpg

在regex101中使用它。更好的可读性可能是

^([a-zA-Z]:|''{2}'w+'$?)('''w{2}.*)+'.(jpe?g|JPE?G)$

还要阅读regex101上的解释来理解任何模式,这很有帮助!