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