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
分组结果:
-
time
:1h 5m 1s
time
-
title
:Title test
-
prize
:Something 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的结尾。