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

问题描述:

我正在研究支持以字母开头的命名参数的Xregexp表达式。这里是我的表达:Xregexp javascript可选命名组由空格隔开

(?: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

+0

你有没有尝试在你的正则表达式的末尾添加一个'?'在结束括号之前? – Thijs

+0

组'时间':'1小时5分1秒' 组'标题':\t'标题测试p:ee'我已经dit了,奖品组被标记为 –

+0

只需添加'?'将不起作用。试试类似[this](https://regex101.com/r/T3B9o0/2)。或者甚至可能[像这样](https://regex101.com/r/lmOKvH/1)。 –

你需要限制你的模式有点摆脱.*会吃光了后续的子模式的最后出现。然后,使用延迟点模式(.*?),只要需要将值匹配到下一个键,并在末尾添加$(字符串末尾)锚点以确保您将获得所有带有惰性点的文本。

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

查看regex pattern

详细

  • d(?:uration)?: - 一个d:duration:
  • (?<time>.*?) - 集团 “时间”:任何零个或多个字符,尽可能少,到随后的子模式
  • 的最左边的发生
  • \s* - 0+空格
  • t(?:itle)?: - 或者title:t:
  • (?<title>.*?) - 组“标题”:任何零个或多个字符,尽可能少
  • \s* - 0+空格
  • (?: - 匹配的1点或0的出现的一个可选的非捕获组的开始:
    • p(?:rize)?: - p:prize:
    • (?<prize>.*) - 集团 “奖”:任何零个或多个字符,尽可能少
  • )? - 可选组的末尾
  • $ - 字符串结尾。