我有这个条件:
A. rest/asks/foo.bar.json
B. rest/asks/foo.bar
我需要一个正则表达式,它允许我捕获以下子字符串:
1. 'rest'
2. 'asks'
3. '/foo.bar'(optional)
4. '.json' (optional)
我花了几个小时寻找解决办法,但不幸的是没有找到解决办法
试过这个:
^(rest)\/([^\/\.]+)(.+)?(?=(\.json))
但是在本例中需要\.json
。
结果:
A. rest/asks/foo.bar.json
1. [0-4] `rest`
2. [5-9] `asks`
3. [9-17] `/foo.bar`
4. [17-22] `.json`
B. rest/asks/foo.bar
Your pattern does not match the subject string.
试过这个:
^(rest)\/([^\/\.]+)(.+)?(?=(\.json)?)
结果:
A. rest/asks/foo.bar.json
1. [0-4] `rest`
2. [5-9] `asks`
3. [9-17] `/foo.bar.json`
B. rest/asks/foo.bar
1. [0-4] `rest`
2. [5-9] `asks`
3. [9-17] `/foo.bar`
有谁可以帮我?
我怎样才能像我所需要的那样将其表示为matche子串呢?
您可以在这里测试正则表达式:http://regex101.com/
发布于 2014-10-31 08:32:04
$
或.json
放在末尾:(?=$|(\.json))
(.+?)?
,以不捕获.json
^(rest)\/([^\/\.]+)(.+?)?(?=$|(\.json))
发布于 2014-10-31 08:36:29
您的第一个正则表达式很好,但是您忘记了一件事:您可以在没有.json的情况下完成:
为此,您必须说您可以使用.json或行$:(?=$|(\.json))
的末尾
那么你有:^(rest)\/([^\/\.]+)(.+?)?(?=$|(\.json))
演示 (查看匹配信息的右侧面板)
希望能帮上忙。
发布于 2014-10-31 08:36:09
你不需要积极向前看。(.*?)(\.json)?
会将\.json
之前的字符捕获到可选组,并将.json
捕获到另一个可选组。
^(rest)\/([^\/\.]+)(.*?)(\.json)?$
演示
https://stackoverflow.com/questions/26670282
复制相似问题