Xregexp javascript 由空格分隔的可选命名组

Xregexp javascript optional named group seperated by white spaces

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

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

它运行良好,但问题是我想将 p:<prize> 组设为可选,我应该使用哪个表达式?

我也在尝试在出现白色时结束捕获space

示例:

我想要什么:

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

我想将 prize 组设为可选

匹配当前表达式:

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

小组成绩:

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

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

参见regex pattern

详情

  • d(?:uration)?: - 一个 d:duration:
  • (?<time>.*?) - 组 "time":任何零个或多个字符,尽可能少,直到最左边出现的后续子模式
  • \s* - 0+ 个空格
  • t(?:itle)?: - title:t:
  • (?<title>.*?)-组"title":任意零个或多个字符,尽可能少
  • \s* - 0+ 个空格
  • (?: - 匹配 1 次或 0 次出现的可选非捕获组的开始:
    • p(?:rize)?: - p:prize:
    • (?<prize>.*) - 组 "prize":任意零个或多个字符,尽可能少
  • )? - 可选组结束
  • $ - 字符串结尾。