我有字符串 “X /路径/到/文件/ 400x0 / image.jpg的?V = ASDF”,其中 “400x0” 部分是可选的。
我需要以下比赛为 “X /路径/到/文件/ 400x0 / image.jpg的V = ASDF?”:
而对于下面的比赛 “X /路径/到/文件/ image.jpg的V = ASDF?”:
^(?:[^\/]+)(.*)\/(\d+)x(\d+)\/([^\?]+)
这一个,只要能正常工作,因为是“400x0”部分
我试图定义的数字部分为可选^(?:[^\/]+)(.*)(?:\/(\d+)x(\d+))?\/([^\?]+)
但在这种情况下,它增加了“400x0”的第一场比赛。它会工作的 “X /路径/到/文件/ image.jpg的?V = ASDF”
我猜?
根本就不是正确的操作?
https://regex101.com/r/8eYGyc/3
我使用的node.js 8
我建议把.*
一点更精确/
只匹配块,然后比/
任何1+字符等,并限制后者的一部分,使其无法比拟\d+x\d+
分部:
^[^\/]+((?:\/(?!\d+x\d+(?:\/|$))[^\/]+)*)(?:\/(\d+)x(\d+))?\/([^?]+)
细节
^
- 一个字符串的开始[^\/]+
- 1以上字符比/
其他((?:\/(?!\d+x\d+(?:\/|$))[^\/]+)*)
- 第1组:中的任何零次或多个重复
\/(?!\d+x\d+(?:\/|$))
- 一个/
炭后面没有与digits+x+digits
子部分(接着与/
或字符串的末尾)
[^\/]+
- 1以上字符比/
其他(?:\/(\d+)x(\d+))?
- 匹配的1点或0的出现的一个可选的非捕获组
\/
- 一个/
字符
(\d+)
- 第2组:一个或多个数字
x
- 一个x
字符
(\d+)
- 第3组:一个或多个数字\/
- 组4:比/
其他任何1个或多个字符。