首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >正则表达式以排除和捕获可选子字符串。

正则表达式以排除和捕获可选子字符串。
EN

Stack Overflow用户
提问于 2014-10-31 08:28:12
回答 3查看 352关注 0票数 0

我有这个条件:

代码语言:javascript
运行
复制
A. rest/asks/foo.bar.json
B. rest/asks/foo.bar

我需要一个正则表达式,它允许我捕获以下子字符串:

代码语言:javascript
运行
复制
1. 'rest'
2. 'asks'
3. '/foo.bar'(optional)
4. '.json' (optional)

我花了几个小时寻找解决办法,但不幸的是没有找到解决办法

试过这个:

代码语言:javascript
运行
复制
^(rest)\/([^\/\.]+)(.+)?(?=(\.json))

但是在本例中需要\.json

结果:

A. rest/asks/foo.bar.json

代码语言:javascript
运行
复制
1.  [0-4]   `rest`
2.  [5-9]   `asks`
3.  [9-17]  `/foo.bar`
4.  [17-22] `.json`

B. rest/asks/foo.bar

代码语言:javascript
运行
复制
Your pattern does not match the subject string.

试过这个:

代码语言:javascript
运行
复制
^(rest)\/([^\/\.]+)(.+)?(?=(\.json)?)

结果:

A. rest/asks/foo.bar.json

代码语言:javascript
运行
复制
1.  [0-4]   `rest`
2.  [5-9]   `asks`
3.  [9-17]  `/foo.bar.json`

B. rest/asks/foo.bar

代码语言:javascript
运行
复制
1.  [0-4]   `rest`
2.  [5-9]   `asks`
3.  [9-17]  `/foo.bar`

有谁可以帮我?

我怎样才能像我所需要的那样将其表示为matche子串呢?

您可以在这里测试正则表达式:http://regex101.com/

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-10-31 08:32:04

  • 使用OR语句将$.json放在末尾:(?=$|(\.json))
  • 使您的模式不贪婪地捕获"foo.bar“:(.+?)?,以不捕获.json
代码语言:javascript
运行
复制
^(rest)\/([^\/\.]+)(.+?)?(?=$|(\.json))

票数 4
EN

Stack Overflow用户

发布于 2014-10-31 08:36:29

您的第一个正则表达式很好,但是您忘记了一件事:您可以在没有.json的情况下完成:

为此,您必须说您可以使用.json或行$:(?=$|(\.json))的末尾

那么你有:^(rest)\/([^\/\.]+)(.+?)?(?=$|(\.json))

演示 (查看匹配信息的右侧面板)

希望能帮上忙。

票数 2
EN

Stack Overflow用户

发布于 2014-10-31 08:36:09

你不需要积极向前看。(.*?)(\.json)?会将\.json之前的字符捕获到可选组,并将.json捕获到另一个可选组。

代码语言:javascript
运行
复制
^(rest)\/([^\/\.]+)(.*?)(\.json)?$

演示

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26670282

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档