2

我想捕获一个强制参数和一个可选参数。

假设我有一个字符串

"X or Y"

“或 Y”是可选的。

我可以

scan /(.*) (or (.*))?/

并接收一个大小为 3 的数组,其中还包括可选 catch 的结果。

如何编写扫描以仅接收 2 个 X 和 Y 可能性的数组?

谢谢你

4

2 回答 2

3

您可以将第二部分的外部组作为non-capturing组:

/(.*) (?:or (.*))?/

现在您的正则表达式中只有两个捕获组:

  • 一个捕捉X部分。
  • 另一个捕捉Y部分。

因此,您将收到仅包含这两个组的数组。因此你不会得到这个or部分。

于 2013-02-17T12:37:06.750 回答
0

在这种情况下,我需要相同的答案,我用谷歌搜索了很多以获得更好的解决方案,在玩弄了逻辑之后,我终于成功了。它在每种情况下都运行良好。URL 是否有一个或两个参数。甚至我们可以在 n 个参数中扩展它。很容易做到。

我的问题陈述是,我有两个差别很小的 URL。

第一个网址)。https://thumbor-cdn1.abc.com/unsafe/700x0/filters:quality(90)/https://s3.amazonaws.com/abc/app_photos/images/1528/original/cover_daily-1.jpg

第二个网址)。https://thumbor-cdn1.abc.com/unsafe/600x0/https://s3.amazonaws.com/abc/users/images/000/263/588/blurred_preview/263588-profile-image-HYU0HBxA5c.jpg

您可以看到第一个 URL700x0/filters:quality(90)和第二个 URL 只有一个参数600x0

正则表达式是-(http|https):\/\/thumbor-cdn1.abc.com\/unsafe\/((.*?)|\/(.*?))\/(http|https):\/\/s3.amazonaws.com\/(abc|xyz)

上面的 url 用于示例目的,对于您的情况,您可以使用有效的 url。 谢谢!

于 2018-03-09T12:54:05.720 回答