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

时间:2017-08-28 11:29:37

标签: javascript node.js regex expression xregexp

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

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

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

我还试图在有空格时结束捕获

示例:

我想要的是什么:

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

我想将prize组作为可选

与当前表达式匹配:

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

小组结果:

  • time1h 5m 1s

  • titleTitle test

  • prizeSomething random

1 个答案:

答案 0 :(得分:0)

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

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

请参阅regex pattern

<强>详情

  • d(?:uration)?: - d:duration:
  • (?<time>.*?) - 组&#34;时间&#34;:任何零个或多个字符,尽可能少,直到后续子模式的最左边出现
  • \s* - 0+ whitespaces
  • t(?:itle)?: - title:t:
  • (?<title>.*?) - 小组&#34;标题&#34;:任意零个或多个字符,尽可能少
  • \s* - 0+ whitespaces
  • (?: - 启动可选的非捕获组,匹配1或0次:
    • p(?:rize)?: - p:prize:
    • (?<prize>.*) - 小组&#34;奖品&#34;:任何零个或多个字符,尽可能少
  • )? - 可选组的结尾
  • $ - 字符串结束。