【问题标题】:Xregexp javascript optional named group seperated by white spacesXregexp javascript 可选命名组,由空格分隔
【发布时间】:2017-08-28 19:57:22
【问题描述】:

我正在研究一个支持以字母开头的命名参数的Xregexp 表达式。这是我的表达:

(?:d:|duration:)(?<time>.*\S+).*(?:t:|title:)(?<title>(?:.*\S+))(?:.*(?:(?:p:|prize:)(?<prize>.*\S+)))

它运行良好,但问题是我想将p:&lt;prize&gt; 组作为可选,我应该使用哪个表达式?

我也在尝试在有空白时结束捕获

例子:

我想要什么:

duration:1h 5m 1s title:Title test [p:prize]&lt;-optionnal group

我想让prize 组作为可选组

匹配当前表达式:

duration:1h 5m 1s title:Title test p:Something random

小组结果:

  • time : 1h 5m 1s

  • title : Title test

  • prize : Something random

【问题讨论】:

  • 您是否尝试在正则表达式末尾的右括号之前添加?
  • time : 1h 5m 1stitle : Title test p:ee 我已经dit了,奖品群就在标题里面了
  • 仅仅添加? 是行不通的。试试this 之类的东西。或者甚至可能是like this
  • 谢谢,它正在工作,如果我想添加第二个可选组?
  • 第二个是什么?

标签: javascript node.js regex expression xregexp


【解决方案1】:

您需要稍微限制您的模式,以摆脱.*,这将耗尽所有后续子模式的最后一次出现。然后,当您需要将一个值匹配到下一个键时,使用惰性点模式 (.*?),并在末尾添加一个 $(字符串结尾)锚点,以确保您将获得所有带有懒惰的点。

d(?:uration)?:(?<time>.*?)\s*t(?:itle)?:(?<title>.*?)\s*(?:p(?:rize)?:(?<prize>.*))?$

请参阅regex pattern

详情

  • d(?:uration)?: - d:duration:
  • (?&lt;time&gt;.*?) - 组“时间”:任何零个或多个字符,尽可能少,直到最左边出现的后续子模式
  • \s* - 0+ 个空格
  • t(?:itle)?: - title:t:
  • (?&lt;title&gt;.*?)- 组“标题”:任何零个或多个字符,尽可能少
  • \s* - 0+ 个空格
  • (?: - 匹配 1 或 0 次出现的可选非捕获组的开始:
    • p(?:rize)?: - p:prize:
    • (?&lt;prize&gt;.*) - 组“奖品”:任何零个或多个字符,尽可能少
  • )? - 可选组结束
  • $ - 字符串结束。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多