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

我正在寻找一个支持以字母开头的命名参数的Xregexpexpression式。 这是我的expression:

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

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

有一个空白的时候,我也试图结束捕获

例:

我想要的是 :

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

我想把prize组作为可选项

与当前expression式匹配:

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

分组结果:

  • time1h 5m 1s time

  • titleTitle test

  • prizeSomething random

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

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

查看正则expression式模式 。

细节

  • d(?:uration)?:d:duration:
  • (?<time>.*?) – 组“时间”:任何零个或多个字符,尽可能less,直到最后一个子模式出现
  • \s* – 0+空格
  • t(?:itle)?:title:t:
  • (?<title>.*?) – 组“标题”:任何零个或多个字符,尽可能less
  • \s* – 0+空格
  • (?: – 启动一个可选的非捕获组匹配1个或0次出现的:
    • p(?:rize)?:p:prize:
    • (?<prize>.*) – 组“奖”:任何零个或多个字符,尽可能less
  • )? – 可选组的结束
  • $ – string的结尾。
Interesting Posts