我对正则表达式非常迷茫。这对我来说只是黑魔法。这是我需要的:
- 有一个文件名:some_file.jpg
- 它可能采用以下格式:some_file_p250.jpg
- 以简单格式匹配文件的正则表达式:/^([a-zA-Z_-0-9]+).(jpg|jpeg|png)$/
- 以高级格式匹配文件的正则表达式: /^([a-zA-Z_-0-9]+)(_[az]?[0-9]{2,3}).(jpg|jpeg|png )$/
我的问题如下:如何使 "(_[az]?[0-9]{3,4})" 部分可选?我尝试向第二组添加一个问号,如下所示:
/^([a-zA-Z_\-0-9]+)(_[a-z]?[0-9]{3,4})?\.(jpg|jpeg|png)$/
即使该模式有效,它总是会在第一组中捕获第二组的内容,而将第二组的内容留空。
我怎样才能使这项工作分别捕获文件名、高级部分(_p250)和扩展名?我认为这与第一组的贪婪有关,但我可能完全错了,即使我是对的,我仍然不知道如何解决它。
谢谢你的想法